鱼C论坛

 找回密码
 立即注册
查看: 2315|回复: 6

关于数组课后作业的问题

[复制链接]
发表于 2019-11-27 17:59:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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[1]=(year1%400==0||(year1%4==0&&year1%100!=0))?29:28;
        while(month1<=12)
        {
            while(day1<=days[month1-1])
            {

                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的值是怎么变化的。

谢谢大家了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-27 18:17:44 | 显示全部楼层
你的代码就是叫白卷
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-27 18:42:08 | 显示全部楼层
bin554385863 发表于 2019-11-27 18:17
你的代码就是叫白卷

不好意思刚刚弄错了,我已经重提交了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-27 19:54:24 | 显示全部楼层
1.goto是直接跳转到标签指定位置运行
  while确实是一层一层退,但是像你这个没有goto顶多也就退了一层,然后死循环了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-27 21:33:12 | 显示全部楼层
lff 发表于 2019-11-27 19:54
1.goto是直接跳转到标签指定位置运行
  while确实是一层一层退,但是像你这个没有goto顶多也就退了一层, ...

很奇怪,这次我把goto删除重新编译以后没问题。。

很奇怪,这次我把goto删除重新编译以后没问题。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-28 10:02:44 | 显示全部楼层

如果没有猜错的话  加了goto的执行时间应该短,不加goto的执行时间长
加了goto是满足了  if(year1==year3&&month1==month3&&day1==day3) 这个条件之后直接退出
没加goto是满足了  if(year1==year3&&month1==month3&&day1==day3) 这个条件之后,又继续执行 while(day1<=days[month1-1]) 这个循环,只是不进到 if(year1==year3&&month1==month3&&day1==day3) 这个条件里,直到不满足while(day1<=days[month1-1])这个条件,然后一层层退出while,然后程序执行结束
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-28 16:41:30 | 显示全部楼层
lff 发表于 2019-11-28 10:02
如果没有猜错的话  加了goto的执行时间应该短,不加goto的执行时间长
加了goto是满足了  if(year1==year ...

谢谢,execution time少了1s多
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 01:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表