g1063496360 发表于 2021-4-5 13:54:40

小白求助

//这个题目是输入某年某月某日,判断这一天是这一年的第几天?   在不考虑百年的情况下 为什么我输入2020.2.1是第33天呢      求助大佬!
#include <stdio.h>

void main()
{
        int Y, M, D,d;
        printf("请输入年月日:\n");
        scanf("%d.%d.%d",&Y, &M, &D);
        switch(M)
        {
        case 1: M=0; break;
        case 2: M=31; break;
        case 3: M=59; break;
        case 4: M=90; break;
        case 5: M=120; break;
        case 6: M=151; break;
        case 7: M=181; break;
        case 8: M=212; break;
        case 9: M=243; break;
        case 10: M=273; break;
        case 11: M=304; break;
        case 12: M=334; break;
        }
        if ( M >= 3 && Y%4==0)
        {
                D=D+1;
        }
        d=D+M;
        printf("你输入的是这一年的第%d天\n",d);

}

洋洋痒 发表于 2021-4-5 13:59:57

你的switch语句已经把M重新赋值了
你下边的判断 if ( M >= 3 && Y%4==0)
      {
                D=D+1;
      }就出问题了
因为M>=3恒为真

g1063496360 发表于 2021-4-5 15:43:42

洋洋痒 发表于 2021-4-5 13:59
你的switch语句已经把M重新赋值了
你下边的判断 if ( M >= 3 && Y%4==0)
      {


这样啊 那怎么改合适捏

洋洋痒 发表于 2021-4-5 15:59:20

g1063496360 发表于 2021-4-5 15:43
这样啊 那怎么改合适捏

把case语句后边的M换成别的变量,例如days,还有最下边d=D+days
#include <stdio.h>

void main()
{
      int Y, M, D,d,days;
      printf("请输入年月日:\n");
      scanf("%d.%d.%d",&Y, &M, &D);
      switch(M)
      {
      case 1: days=0; break;
      case 2: days=31; break;
      case 3: days=59; break;
      case 4: days=90; break;
      case 5: days=120; break;
      case 6: days=151; break;
      case 7: days=181; break;
      case 8: days=212; break;
      case 9: days=243; break;
      case 10: days=273; break;
      case 11: days=304; break;
      case 12: days=334; break;
      }
      if ( M >= 3 && Y%4==0)
      {
                D=D+1;
      }
      d=D+days;
      printf("你输入的是这一年的第%d天\n",d);

}

g1063496360 发表于 2021-4-5 16:14:10

洋洋痒 发表于 2021-4-5 15:59
把case语句后边的M换成别的变量,例如days,还有最下边d=D+days

谢谢大佬{:10_256:}
页: [1]
查看完整版本: 小白求助