鱼C论坛

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

有关循环问题

[复制链接]
发表于 2021-10-31 10:50:48 | 显示全部楼层 |阅读模式
5鱼币
  1. #include <stdio.h>
  2. int main()
  3. {
  4.         int year,month,day;
  5.         int ret;
  6.         printf("请输入一个日期:(格式:yyyy-mm-dd)");
  7.         while((ret=scanf("%d-%d-%d",&year,&month,&day))!=EOF)//想让其能重复查询,这样用while却行不通
  8.         {
  9.         if(ret!=3)
  10.         printf("请输入正确的格式!");
  11.        
  12.         if(month<1 || month>12)
  13.         printf("月份输入错误!");
  14.         if(year<0)
  15.         printf("年份输入错误!");
  16.        
  17.         switch(month){
  18.         case 1:
  19.         case 3:
  20.         case 5:
  21.         case 7:
  22.         case 8:
  23.         case 10:
  24.         case 12: if(day<1 || day>31){
  25.                         printf("该月份最多31天");
  26.                         return 0;
  27.                         }
  28.         switch(month){
  29.         case 4:
  30.         case 6:
  31.         case 9:
  32.         case 11:if(day>30) {
  33.                         printf("该月份最多30天!");
  34.                         return 0;}
  35.         case 2:if((year%100!= 0 && year%4== 0)|| year%400== 0)
  36.                         {if(day>29) printf("闰年二月最多29天!"); return 0;}
  37.                 else {
  38.                 if(day>28) printf("非闰年二月最多28天!"); return 0;}
  39.         }
  40.         }
  41.         //泰勒公式
  42.         int w,c,y,m,d;
  43.         if(month== 1 || month== 2){
  44.                 y= year-1;
  45.                 m= month+12; }
  46.         else
  47.         {
  48.                 y= year;
  49.                 m= month;
  50.         }
  51.         c= y/100;
  52.         y= y%100;
  53.         d= day;
  54.         w =(y+ (int)y/4+ (int) c/4-2*c+ (int) (26*(m+1)/10)+d-1)%7;
  55.         switch(w){
  56.         case 0:printf("%4d-%02d-%02d为星期天\n",year,month,day);break;
  57.         case 1:printf("%4d-%02d-%02d为星期一\n",year,month,day);break;
  58.         case 2:printf("%4d-%02d-%02d为星期二\n",year,month,day);break;
  59.         case 3:printf("%4d-%02d-%02d为星期三\n",year,month,day);break;
  60.         case 4:printf("%4d-%02d-%02d为星期四\n",year,month,day);break;
  61.         case 5:printf("%4d-%02d-%02d为星期五\n",year,month,day);break;
  62.         case 6:printf("%4d-%02d-%02d为星期六\n",year,month,day);break;
  63.         default: printf("Error-%d",w);
  64.         }
  65.         return 0;
  66.         }
  67. }
复制代码


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

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-10-31 11:53:59 | 显示全部楼层

  1. #include <stdio.h>
  2. int main()
  3. {
  4.         int year=-1,month=-1,day=-1;
  5.         int ret;
  6.         char exit=0;
  7.         while(1)//想让其能重复查询,这样用while却行不通
  8.         {
  9.                 printf("请输入一个日期:(格式:yyyy-mm-dd)\n");
  10.                 ret=scanf("%d-%d-%d",&year,&month,&day);

  11.                 if(ret!=3)
  12.                 {

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

  22.                 switch(month){
  23.                 case 1:
  24.                 case 3:
  25.                 case 5:
  26.                 case 7:
  27.                 case 8:
  28.                 case 10:
  29.                 case 12: if(day<1 || day>31){
  30.                         printf("该月份最多31天");
  31.                         return 0;
  32.                                  }
  33.                                  switch(month){
  34.                                  case 4:
  35.                                  case 6:
  36.                                  case 9:
  37.                                  case 11:if(day>30) {
  38.                                          printf("该月份最多30天!");
  39.                                          return 0;}
  40.                                  case 2:if((year%100!= 0 && year%4== 0)|| year%400== 0)
  41.                                                 {if(day>29) printf("闰年二月最多29天!"); return 0;}
  42.                                                 else {
  43.                                                         if(day>28) printf("非闰年二月最多28天!"); return 0;}
  44.                                  }
  45.                 }
  46.                 //泰勒公式
  47.                 int w,c,y,m,d;
  48.                 if(month== 1 || month== 2){
  49.                         y= year-1;
  50.                         m= month+12; }
  51.                 else
  52.                 {
  53.                         y= year;
  54.                         m= month;
  55.                 }
  56.                 c= y/100;
  57.                 y= y%100;
  58.                 d= day;
  59.                 w =(y+ (int)y/4+ (int) c/4-2*c+ (int) (26*(m+1)/10)+d-1)%7;
  60.                 switch(w){
  61.                 case 0:printf("%4d-%02d-%02d为星期天\n",year,month,day);break;
  62.                 case 1:printf("%4d-%02d-%02d为星期一\n",year,month,day);break;
  63.                 case 2:printf("%4d-%02d-%02d为星期二\n",year,month,day);break;
  64.                 case 3:printf("%4d-%02d-%02d为星期三\n",year,month,day);break;
  65.                 case 4:printf("%4d-%02d-%02d为星期四\n",year,month,day);break;
  66.                 case 5:printf("%4d-%02d-%02d为星期五\n",year,month,day);break;
  67.                 case 6:printf("%4d-%02d-%02d为星期六\n",year,month,day);break;
  68.                 default: printf("Error-%d",w);
  69.                 }

  70.         }
  71.         return 0;
  72. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

那如何退出呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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


退出的话在73行之后写一段类似于这样的代码就好了
  1.                 int ch;
  2.                 printf("是否继续查询:(Y/N)");
  3.                 ch = getchar();
  4.                 if(ch == 'N')
  5.                 {
  6.                     break;
  7.                 }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-6 17:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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