C语言三天打鱼两天筛网的程序 求教 !找了好久没找出问题,大神看看是逻辑问题吗?万分感谢

歌者丶 2018-07-19 09:02:10
#include<stdio.h>
int year(int Ny);
int month(int Nm,int Ny1);

int main()
{

int Oyear = 2001;
int Nyear,Nmonth,Nday;
int Anum=0,numy,numm;
printf("input:\n");
scanf("%d %d %d",&Nyear,&Nmonth,&Nday);

if(Nyear >= 2001)
{
if(Nmonth >= 1 && Nmonth <= 12)
{
if(Nday >= 1 && Nday <= 31)
{
year(Nyear);
month(Nmonth,Nyear);
Anum=numy+numm+Nday;
printf("%d\n",Anum);
if(Anum%5 == 0 || Anum%5 == 4)
{
printf("这天它在晒网!\n");
}
else
{
printf("这天它在打鱼!\n");
}
}
else
{
printf("输入天数错误!\n");
}

}
else
{
printf("输入月份错误!\n");
}

}
else
{
printf("输入年份错误!\n");
}

return 0;
}

int year(int Ny)
{
int i,numy = 0;

for(i=2001;i<Ny;i++)
{
if((i%4 == 0 && i%100 != 0)||(i%400 == 0))
{
numy += 366;
}
else
{
numy += 365;
}
}

return (numy);
}
int month(int Nm,int Ny1)
{
int a[]={31,28,31,30,31,30,31,31,30,31,30,31};
int j,k,numm = 0;
if(Nm >= 1 && Nm <= 12)
{
for(j=0;j<Nm;j++)
{
numm += a[j];
}
}

for(k=2001;k<Ny1;k++)
{
if(((k%4 == 0 && k%100 != 0)||(k%400 == 0))&&(Nm > 2))
{
numm += 1;
}
}
return (numm);
}
...全文
264 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
_肆 2018-07-20
  • 打赏
  • 举报
回复
修改代码:
numy=year(Nyear);
numm=month(Nmonth, Nyear);

你子函数里的numy、numm是局部变量,return后需要变量接收,而你main里的numy、numm和子函数的numy、numm不是一回事,除非你把numy、numm申明在main外面作为全局变量,才能这么写

在插说一下,你这程序设计上的东西,不说一月和一月天数不一样、闰年闰月的问题,你这是从2001年1月1日起算的把,月份等于1的时候,加31天合适吗?
歌者丶 2018-07-20
  • 打赏
  • 举报
回复
不是,已经解决了
donjin9 2018-07-20
  • 打赏
  • 举报
回复
numy numm没赋值吧,在循环里改改看。
numy = year(Nyear);
numm = month(Nmonth,Nyear);

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧