鱼C论坛

 找回密码
 立即注册
查看: 2514|回复: 3

有关循环问题

[复制链接]
发表于 2021-10-31 10:50:48 | 显示全部楼层 |阅读模式
5鱼币
#include <stdio.h>
int main()
{
        int year,month,day;
        int ret;
        printf("请输入一个日期:(格式:yyyy-mm-dd)");
        while((ret=scanf("%d-%d-%d",&year,&month,&day))!=EOF)//想让其能重复查询,这样用while却行不通 
        {
        if(ret!=3)
        printf("请输入正确的格式!");
        
        if(month<1 || month>12)
        printf("月份输入错误!");
        if(year<0)
        printf("年份输入错误!");
        
        switch(month){
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12: if(day<1 || day>31){
                        printf("该月份最多31天");
                        return 0;
                        }
        switch(month){
        case 4:
        case 6:
        case 9:
        case 11:if(day>30) {
                        printf("该月份最多30天!");
                        return 0;}
        case 2:if((year%100!= 0 && year%4== 0)|| year%400== 0)
                        {if(day>29) printf("闰年二月最多29天!"); return 0;}
                else {
                if(day>28) printf("非闰年二月最多28天!"); return 0;}
        }
        }
        //泰勒公式
        int w,c,y,m,d;
        if(month== 1 || month== 2){
                y= year-1;
                m= month+12; }
        else 
        {
                y= year;
                m= month;
        }
        c= y/100;
        y= y%100;
        d= day;
        w =(y+ (int)y/4+ (int) c/4-2*c+ (int) (26*(m+1)/10)+d-1)%7;
        switch(w){
        case 0:printf("%4d-%02d-%02d为星期天\n",year,month,day);break;
        case 1:printf("%4d-%02d-%02d为星期一\n",year,month,day);break;
        case 2:printf("%4d-%02d-%02d为星期二\n",year,month,day);break;
        case 3:printf("%4d-%02d-%02d为星期三\n",year,month,day);break;
        case 4:printf("%4d-%02d-%02d为星期四\n",year,month,day);break;
        case 5:printf("%4d-%02d-%02d为星期五\n",year,month,day);break;
        case 6:printf("%4d-%02d-%02d为星期六\n",year,month,day);break;
        default: printf("Error-%d",w);
        }
        return 0;
        }
}

问题如下:
如何用while使用户能重复查询?

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

使用道具 举报

发表于 2021-10-31 11:53:59 | 显示全部楼层
#include <stdio.h>
int main()
{
        int year=-1,month=-1,day=-1;
        int ret;
        char exit=0;
        while(1)//想让其能重复查询,这样用while却行不通 
        {
                printf("请输入一个日期:(格式:yyyy-mm-dd)\n");
                ret=scanf("%d-%d-%d",&year,&month,&day);

                if(ret!=3)
                {

                        while((exit=getchar())!='\n'){if('Q'==exit||'q'==exit)break;};
                        if('Q'==exit||'q'==exit)break;
                        printf("请输入正确的格式!\n");
                        continue;
                }
                if(month<1 || month>12)
                        printf("月份输入错误!");
                if(year<0)
                        printf("年份输入错误!");

                switch(month){
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12: if(day<1 || day>31){
                        printf("该月份最多31天");
                        return 0;
                                 }
                                 switch(month){
                                 case 4:
                                 case 6:
                                 case 9:
                                 case 11:if(day>30) {
                                         printf("该月份最多30天!");
                                         return 0;}
                                 case 2:if((year%100!= 0 && year%4== 0)|| year%400== 0)
                                                {if(day>29) printf("闰年二月最多29天!"); return 0;}
                                                else {
                                                        if(day>28) printf("非闰年二月最多28天!"); return 0;}
                                 }
                }
                //泰勒公式
                int w,c,y,m,d;
                if(month== 1 || month== 2){
                        y= year-1;
                        m= month+12; }
                else 
                {
                        y= year;
                        m= month;
                }
                c= y/100;
                y= y%100;
                d= day;
                w =(y+ (int)y/4+ (int) c/4-2*c+ (int) (26*(m+1)/10)+d-1)%7;
                switch(w){
                case 0:printf("%4d-%02d-%02d为星期天\n",year,month,day);break;
                case 1:printf("%4d-%02d-%02d为星期一\n",year,month,day);break;
                case 2:printf("%4d-%02d-%02d为星期二\n",year,month,day);break;
                case 3:printf("%4d-%02d-%02d为星期三\n",year,month,day);break;
                case 4:printf("%4d-%02d-%02d为星期四\n",year,month,day);break;
                case 5:printf("%4d-%02d-%02d为星期五\n",year,month,day);break;
                case 6:printf("%4d-%02d-%02d为星期六\n",year,month,day);break;
                default: printf("Error-%d",w);
                }

        }
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-10-31 18:12:50 | 显示全部楼层

那如何退出呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-1 14:22:52 | 显示全部楼层


退出的话在73行之后写一段类似于这样的代码就好了
                int ch;
                printf("是否继续查询:(Y/N)");
                ch = getchar();
                if(ch == 'N')
                {
                    break;
                }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 19:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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