鱼C论坛

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

[已解决]表达式莫名出错

[复制链接]
发表于 2020-5-19 20:55:03 | 显示全部楼层 |阅读模式

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

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

x
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include <string.h>

  4. char *s_gets(char *st, int n);
  5. int lower(char *st);
  6. int days(int year, int month, int day);
  7. struct month{
  8.     char monthname[10];
  9.     char abbrev[4];
  10.     int days;
  11.     int num_month;
  12. };
  13. const struct month months[12] = {
  14.     {"January", "Jan", 31, 1},
  15.     {"February", "Feb", 28, 2},
  16.     {"March", "Mar", 31, 3},
  17.     {"April", "Apr", 30, 4},
  18.     {"May", "May", 31, 5},
  19.     {"June", "Jun", 30, 6},
  20.     {"July", "Jul", 31, 7},
  21.     {"August", "Aug", 31, 8},
  22.     {"September", "Sep", 30, 9},
  23.     {"October", "Oct", 31, 10},
  24.     {"November", "Nov", 30, 11},
  25.     {"December", "Dec", 31, 12}
  26. };
  27. int main(void)
  28. {
  29.     char god[10];
  30.     int year, month, day;
  31.     printf("请输入年:");
  32.     while(scanf("%d", &year)==1)
  33.     {
  34.         printf("请输入月:");
  35.         if(scanf("%d", &month)==1)
  36.             ;
  37.         else{
  38.             int i;
  39.             s_gets(god, 10);
  40.             for(i=0;i<12;i++)
  41.             {
  42.                 if(strcmp(god, months[i].monthname)==0||strcmp(god, months[i].abbrev)==0)
  43.                 {   
  44.                     month = months[i].num_month;
  45.                     break;
  46.                 }
  47.             }
  48.         }
  49.          printf("请输入日:");
  50.          scanf("%d", &day);
  51.          printf("您输入了%d年%d月%d日\n", year, month, day);
  52.          printf("一年直至这一天需要%d天\n", days(year,month,day));
  53.          printf("请输入年:");
  54.     }
  55.     printf("byb!\n");
  56.     return 0;


  57. }
  58. char *s_gets(char *st, int n)
  59. {
  60.     char *fa;
  61.     char *find;
  62.     fa = fgets(st, n, stdin);
  63.     if(fa)
  64.     {
  65.         find = strchr(fa,'\n');
  66.         if(find)
  67.             *find = '\0';
  68.         else
  69.             while(getchar()!='\n')
  70.                 continue;
  71.         
  72.     }
  73.     return fa;
  74. }
  75. int days(int year, int month, int day)
  76. {
  77.     int ch = 0;
  78.     int i ;
  79.     [color=Red]months[1].days = year % 4 == 0 ? 29 : 28;[/color]
  80.     for(i= 0;i<month-1;i++)
  81.     {
  82.         ch += months[i].days;
  83.     }
  84.     return ch +day;


  85. }
复制代码


红色那行,我觉得表达式没错误啊
怎么一直提醒报错,我晕了
求大佬帮助
最佳答案
2020-5-19 20:58:19
你写的是const struct,不能改变
所以就报错了
去掉const可以:
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include <string.h>

  4. char *s_gets(char *st, int n);
  5. int lower(char *st);
  6. int days(int year, int month, int day);
  7. struct month{
  8.     char monthname[10];
  9.     char abbrev[4];
  10.     int days;
  11.     int num_month;
  12. };
  13. struct month months[12] = {
  14.     {"January", "Jan", 31, 1},
  15.     {"February", "Feb", 28, 2},
  16.     {"March", "Mar", 31, 3},
  17.     {"April", "Apr", 30, 4},
  18.     {"May", "May", 31, 5},
  19.     {"June", "Jun", 30, 6},
  20.     {"July", "Jul", 31, 7},
  21.     {"August", "Aug", 31, 8},
  22.     {"September", "Sep", 30, 9},
  23.     {"October", "Oct", 31, 10},
  24.     {"November", "Nov", 30, 11},
  25.     {"December", "Dec", 31, 12}
  26. };
  27. int main(void)
  28. {
  29.     char god[10];
  30.     int year, month, day;
  31.     printf("请输入年:");
  32.     while(scanf("%d", &year)==1)
  33.     {
  34.         printf("请输入月:");
  35.         if(scanf("%d", &month)==1)
  36.             ;
  37.         else{
  38.             int i;
  39.             s_gets(god, 10);
  40.             for(i=0;i<12;i++)
  41.             {
  42.                 if(strcmp(god, months[i].monthname)==0||strcmp(god, months[i].abbrev)==0)
  43.                 {   
  44.                     month = months[i].num_month;
  45.                     break;
  46.                 }
  47.             }
  48.         }
  49.          printf("请输入日:");
  50.          scanf("%d", &day);
  51.          printf("您输入了%d年%d月%d日\n", year, month, day);
  52.          printf("一年直至这一天需要%d天\n", days(year,month,day));
  53.          printf("请输入年:");
  54.     }
  55.     printf("byb!\n");
  56.     return 0;


  57. }
  58. char *s_gets(char *st, int n)
  59. {
  60.     char *fa;
  61.     char *find;
  62.     fa = fgets(st, n, stdin);
  63.     if(fa)
  64.     {
  65.         find = strchr(fa,'\n');
  66.         if(find)
  67.             *find = '\0';
  68.         else
  69.             while(getchar()!='\n')
  70.                 continue;
  71.         
  72.     }
  73.     return fa;
  74. }
  75. int days(int year, int month, int day)
  76. {
  77.     int ch = 0;
  78.     int i;
  79.     months[1].days = (year % 4 == 0 ? 29 : 28);
  80.     for(i= 0;i<month-1;i++)
  81.     {
  82.         ch += months[i].days;
  83.     }
  84.     return ch + day;


  85. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-5-19 20:58:19 | 显示全部楼层    本楼为最佳答案   
你写的是const struct,不能改变
所以就报错了
去掉const可以:
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include <string.h>

  4. char *s_gets(char *st, int n);
  5. int lower(char *st);
  6. int days(int year, int month, int day);
  7. struct month{
  8.     char monthname[10];
  9.     char abbrev[4];
  10.     int days;
  11.     int num_month;
  12. };
  13. struct month months[12] = {
  14.     {"January", "Jan", 31, 1},
  15.     {"February", "Feb", 28, 2},
  16.     {"March", "Mar", 31, 3},
  17.     {"April", "Apr", 30, 4},
  18.     {"May", "May", 31, 5},
  19.     {"June", "Jun", 30, 6},
  20.     {"July", "Jul", 31, 7},
  21.     {"August", "Aug", 31, 8},
  22.     {"September", "Sep", 30, 9},
  23.     {"October", "Oct", 31, 10},
  24.     {"November", "Nov", 30, 11},
  25.     {"December", "Dec", 31, 12}
  26. };
  27. int main(void)
  28. {
  29.     char god[10];
  30.     int year, month, day;
  31.     printf("请输入年:");
  32.     while(scanf("%d", &year)==1)
  33.     {
  34.         printf("请输入月:");
  35.         if(scanf("%d", &month)==1)
  36.             ;
  37.         else{
  38.             int i;
  39.             s_gets(god, 10);
  40.             for(i=0;i<12;i++)
  41.             {
  42.                 if(strcmp(god, months[i].monthname)==0||strcmp(god, months[i].abbrev)==0)
  43.                 {   
  44.                     month = months[i].num_month;
  45.                     break;
  46.                 }
  47.             }
  48.         }
  49.          printf("请输入日:");
  50.          scanf("%d", &day);
  51.          printf("您输入了%d年%d月%d日\n", year, month, day);
  52.          printf("一年直至这一天需要%d天\n", days(year,month,day));
  53.          printf("请输入年:");
  54.     }
  55.     printf("byb!\n");
  56.     return 0;


  57. }
  58. char *s_gets(char *st, int n)
  59. {
  60.     char *fa;
  61.     char *find;
  62.     fa = fgets(st, n, stdin);
  63.     if(fa)
  64.     {
  65.         find = strchr(fa,'\n');
  66.         if(find)
  67.             *find = '\0';
  68.         else
  69.             while(getchar()!='\n')
  70.                 continue;
  71.         
  72.     }
  73.     return fa;
  74. }
  75. int days(int year, int month, int day)
  76. {
  77.     int ch = 0;
  78.     int i;
  79.     months[1].days = (year % 4 == 0 ? 29 : 28);
  80.     for(i= 0;i<month-1;i++)
  81.     {
  82.         ch += months[i].days;
  83.     }
  84.     return ch + day;


  85. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-19 21:01:11 | 显示全部楼层
楼上正解
我又慢了……
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-19 21:03:08 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-5-19 21:01
楼上正解
我又慢了……

也谢谢你帮忙找错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-4 14:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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