这是一道简短函数题:输入年月日要求输出这是该年第几天?我写的中间代码为什么不执行,求大手指点迷津。

#include
#include
void main()
{int calculatedDays(int year,int month,int day);
int year,month,day;
scanf("%4d,%4d,%4d\n",&year,&month,&day);
calculatedDays(year,month,day);
system("pause");
}

int calculatedDays(int year,int month,int day)
{int leap,totaldays;
if((year%4==0&&year%100!=0)||(year%400==0))
leap=1;
else
leap=0;
while(leap==1)
{if(month==1)
totaldays=day;
else if(month==2)
totaldays=31+day;
else if(month==3)
totaldays=31+29+day;
else if(month==4)
totaldays=31+29+31+day;
else if(month==5)
totaldays=31+29+31+30+day;
else if(month==6)
totaldays=31+29+31+30+31+day;
else if(month==7)
totaldays=31+29+31+30+31+30+day;
else if(month==8)
totaldays=31+29+31+30+31+30+31+day;
else if(month==9)
totaldays=31+29+31+30+31+30+31+31+day;
else if(month==10)
totaldays=31+29+31+30+31+30+31+31+30+day;
else if(month==11)
totaldays=31+29+31+30+31+30+31+31+30+31+day;
else
totaldays=31+29+31+30+31+30+31+31+30+31+30+day;
break;
}
while(leap==0)
{if(month==1)
totaldays=day;
else if(month==2)
totaldays=31+day;
else if(month==3)
totaldays=31+28+day;
else if(month==4)
totaldays=31+28+31+day;
else if(month==5)
totaldays=31+28+31+30+day;
else if(month==6)
totaldays=31+28+31+30+31+day;
else if(month==7)
totaldays=31+28+31+30+31+30+day;
else if(month==8)
totaldays=31+28+31+30+31+30+31+day;
else if(month==9)
totaldays=31+28+31+30+31+30+31+31+day;
else if(month==10)
totaldays=31+28+31+30+31+30+31+31+30+day;
else if(month==11)
totaldays=31+28+31+30+31+30+31+31+30+31+day;
else
totaldays=31+28+31+30+31+30+31+31+30+31+30+day;
break;
}
return(printf("该日是该年的第:%4d天\n",totaldays));
}

7个回答

 #include <stdio.h>
#include <stdlib.h>

int calculatedDays(int year,int month,int day);
void main()
{
    int year,month,day;
    scanf("%d %d %d",&year,&month,&day);
    calculatedDays(year,month,day);
    system("pause");
}

int calculatedDays(int year,int month,int day)
{
    int leap,totaldays;
    if((year%4==0&&year%100!=0)||(year%400==0))
        leap=1;
    else
        leap=0;

    if(leap==1)
    {
        if(month==1)
            totaldays=day;
        else if(month==2)
            totaldays=31+day;
        else if(month==3)
            totaldays=31+29+day;
        else if(month==4)
            totaldays=31+29+31+day;
        else if(month==5)
            totaldays=31+29+31+30+day;
        else if(month==6)
            totaldays=31+29+31+30+31+day;
        else if(month==7)
            totaldays=31+29+31+30+31+30+day;
        else if(month==8)
            totaldays=31+29+31+30+31+30+31+day;
        else if(month==9)
            totaldays=31+29+31+30+31+30+31+31+day;
        else if(month==10)
            totaldays=31+29+31+30+31+30+31+31+30+day;
        else if(month==11)
            totaldays=31+29+31+30+31+30+31+31+30+31+day;
        else
            totaldays=31+29+31+30+31+30+31+31+30+31+30+day;
    }
    else
    {
        if(month==1)
            totaldays=day;
        else if(month==2)
            totaldays=31+day;
        else if(month==3)
            totaldays=31+28+day;
        else if(month==4)
            totaldays=31+28+31+day;
        else if(month==5)
            totaldays=31+28+31+30+day;
        else if(month==6)
            totaldays=31+28+31+30+31+day;
        else if(month==7)
            totaldays=31+28+31+30+31+30+day;
        else if(month==8)
            totaldays=31+28+31+30+31+30+31+day;
        else if(month==9)
            totaldays=31+28+31+30+31+30+31+31+day;
        else if(month==10)
            totaldays=31+28+31+30+31+30+31+31+30+day;
        else if(month==11)
            totaldays=31+28+31+30+31+30+31+31+30+31+day;
        else
            totaldays=31+28+31+30+31+30+31+31+30+31+30+day;
    }
    return(printf("该日是该年的第:%4d天\n",totaldays));
}

自己编的函数得先声明,在 main 函数前 加上 int calculatedDays(int year,int month,int day);

Iareu
Iareu 在main函数里面声明了
3 年多之前 回复
rikilee_ouc
rikilee_ouc 要么把函数整体放在main 函数之前
3 年多之前 回复

什么不执行,我怎么感觉应该把while改成if呢?

Iareu
Iareu if改过了,一样不执行
3 年多之前 回复
 void main()
{int calculatedDays(int year,int month,int day);
int year,month,day;
scanf("%4d,%4d,%4d\n",&year,&month,&day);
calculatedDays(year,month,day);
system("pause");
}

改成下面试试

int calculatedDays(int year,int month,int day);
void main()
{
int year,month,day;
scanf("%4d,%4d,%4d\n",&year,&month,&day);
calculatedDays(year,month,day);
system("pause");
} 
Iareu
Iareu 我已记不清我错在scanf输入格式上多少次了,真的是
3 年多之前 回复
Iareu
Iareu 回复Iareu: 输入格式有两种,一种是逗号隔着输入,一种是空格输入,你的是空格输入,原来问题出在这里,代码并没有任何问题
3 年多之前 回复
Iareu
Iareu 回复AlbertS: 而且确实你说的scanf中的\n是应该去除的,然后输入格式按我说的那样就是对的,感谢
3 年多之前 回复
shihengzhen101
AlbertS 回复Iareu: 你原来的代码得输入 2016,1,1 回车回车才可以,因为你的\n,所以必须输入两个回车
3 年多之前 回复
Iareu
Iareu 我代码确实没有错误,只是在输入年月日的时候格式错误,我输入的时候输成了:2016 1 1(这是错误的),其实应该是这样输入的:2016,1,1(才正确)
3 年多之前 回复
Iareu
Iareu 我知道我错在那里了
3 年多之前 回复
Iareu
Iareu 回复AlbertS: 我懂了
3 年多之前 回复
shihengzhen101
AlbertS 主要是你scanf中的\n的问题,你看看下边的代码吧,其实还可以精简的
3 年多之前 回复
Iareu
Iareu 回复AlbertS: 你说的把自己要写的函数可以放在整个main()函数之前,我理解你的意思,问题是我感觉我的代码问题不是出在函数声明位置的,而是出在不执行if()和while()语句,你可以下载cpp在vc里面看看
3 年多之前 回复
shihengzhen101
AlbertS 你这不是开玩笑嘛,从来没见过这种声明的方法
3 年多之前 回复
Iareu
Iareu 不行的,语法错误,调用函数要在main函数(主函数)里面声明,我已经在里面声明了
3 年多之前 回复
 #include <stdio.h>


int clu_day(int y,int m,int d);
int main()
{
      int sum=0;
      while(1)
      {
      int year=0,mouth=0,day=0;

      printf("璇疯緭鍏ュ勾鏈堟棩鐨勪俊鎭€併€乗n");
      scanf("%d %d %d",&year,&mouth,&day);

      sum=clu_day(year,mouth,day);
      printf("%d鏄?dyear%dmouth%dday\n",sum,year,mouth,day);
      }
      return 0;
}

int clu_day(int y,int m,int d)
{
      int sum=0;
      int feb=0;

      if(((y%4)==0&&(y%100)!=0)||(y%400==0))
      {
        feb=29;
      }
      else
      {
        feb=28;
      }
      if(m==1)
      {
        sum=d;
    //    return sum;
      }
      if(m==2)
      {

        sum=31+d;
      //    return sum; 

      }
      if(m==3)
      {

          sum=31+feb+d;
    //    return sum;

      }
      if(m==4)
      {

        sum=31+feb+31+d;
      //    return sum; 

      }
      if(m==5)
      {

        sum=31+feb+31+30+d;
        //  return sum; 

      }
      if(m==6)
      {

        sum=31+feb+31+30+31+d;
          //return sum; 

      }
      if(m==7)
      {

        sum=31+feb+31+30+31+30+d;
         // return sum; 

      }
      if(m==8)
      {

        sum=31+feb+31+30+31+30+31+d;
         /// return sum;    

      }
      if(m==9)
      {

        sum=31+feb+31+30+31+30+31+31+d;
         /// return sum;    

      }
      if(m==10)
      {

        sum=31+feb+31+30+31+30+31+31+30+d;
         // return sum; 

      }
      if(m==11)
      {

        sum=31+feb+31+30+31+30+31+31+30+31+d;
         // return sum; 

      }
      if(m==12)
      {

        sum=31+feb+31+30+31+30+31+31+30+31+30+d;
         // return sum; 

      }
      return sum;

}

上面乱码是ubantu换到source insight 上面出现的 不影响结果

讲真的,这代码。。。为啥不用一个数组存月份,再来一个for循环呢,几行代码就搞定了啊

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问