关于数组课后作业的问题
本帖最后由 nzr848704474 于 2019-11-27 18:41 编辑在生命计算器2.0中,我的代码如下:
#include<stdio.h>
int main()
{
long count=0,count1=0;//用于一共多少天
int year1,year2,year3;//Year1是生日,year2是当前日期
int month1,month2,month3;
int day1,day2,day3;
int days[]={31,28,31,30,31,30,31,31,30,31,30,31};
printf("请输入您的生日:(如1995-04-17)");
scanf("%d-%d-%d",&year1,&month1,&day1);
printf("请输入您的生日:(如1995-04-17)");
scanf("%d-%d-%d",&year2,&month2,&day2);
year3=year1+80;
month3=month1;
day3=day1;
while(year1<=year2||year1<=year3)
{
days=(year1%400==0||(year1%4==0&&year1%100!=0))?29:28;
while(month1<=12)
{
while(day1<=days)
{
if(year1==year2&&month1==month2&&day1==day2)
{
count1=count;
printf("你在这个世界上活了%d天\n",count);
}
if(year1==year3&&month1==month3&&day1==day3)
{
printf("如果你能活到80岁,还剩下%d天\n",count-count1);
printf("你已经使用了%%%.2f的生命,珍惜剩下的时间\n",(double)count1/count*100);
goto Finish;
}
day1++;
count++;
}
day1=1;
month1++;
}
month1=1;
year1++;
}
Finish:printf("%d,%d\n",count,count1);
return 0;
我的问题是:1.为什么没有goto语句,程序就会出问题?我认为当执行到输出year3的时候已经year1==year3了,循环就不会再继续了,那有goto好像就是直接到,没goto就是一层一层退出循环,所以应该是没区别。
2.求解释count和count1的值是怎么变化的。
谢谢大家了。 你的代码就是叫白卷 bin554385863 发表于 2019-11-27 18:17
你的代码就是叫白卷
不好意思刚刚弄错了,我已经重提交了 1.goto是直接跳转到标签指定位置运行
while确实是一层一层退,但是像你这个没有goto顶多也就退了一层,然后死循环了吧
lff 发表于 2019-11-27 19:54
1.goto是直接跳转到标签指定位置运行
while确实是一层一层退,但是像你这个没有goto顶多也就退了一层, ...
。 nzr848704474 发表于 2019-11-27 21:33
。
如果没有猜错的话加了goto的执行时间应该短,不加goto的执行时间长
加了goto是满足了if(year1==year3&&month1==month3&&day1==day3) 这个条件之后直接退出
没加goto是满足了if(year1==year3&&month1==month3&&day1==day3) 这个条件之后,又继续执行 while(day1<=days) 这个循环,只是不进到 if(year1==year3&&month1==month3&&day1==day3) 这个条件里,直到不满足while(day1<=days)这个条件,然后一层层退出while,然后程序执行结束 lff 发表于 2019-11-28 10:02
如果没有猜错的话加了goto的执行时间应该短,不加goto的执行时间长
加了goto是满足了if(year1==year ...
谢谢,execution time少了1s多
页:
[1]