鱼C论坛

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

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

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

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

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

x
#include <stdio.h>
#include <ctype.h>
#include <string.h>

char *s_gets(char *st, int n);
int lower(char *st);
int days(int year, int month, int day);
struct month{
    char monthname[10];
    char abbrev[4];
    int days;
    int num_month;
};
const struct month months[12] = {
    {"January", "Jan", 31, 1}, 
    {"February", "Feb", 28, 2}, 
    {"March", "Mar", 31, 3}, 
    {"April", "Apr", 30, 4}, 
    {"May", "May", 31, 5}, 
    {"June", "Jun", 30, 6}, 
    {"July", "Jul", 31, 7}, 
    {"August", "Aug", 31, 8}, 
    {"September", "Sep", 30, 9}, 
    {"October", "Oct", 31, 10},
    {"November", "Nov", 30, 11}, 
    {"December", "Dec", 31, 12}
};
int main(void)
{
    char god[10];
    int year, month, day;
    printf("请输入年:");
    while(scanf("%d", &year)==1)
    {
        printf("请输入月:");
        if(scanf("%d", &month)==1)
            ;
        else{
            int i;
            s_gets(god, 10);
            for(i=0;i<12;i++)
            {
                if(strcmp(god, months[i].monthname)==0||strcmp(god, months[i].abbrev)==0)
                {   
                    month = months[i].num_month;
                    break;
                }
            }
        }
         printf("请输入日:");
         scanf("%d", &day);
         printf("您输入了%d年%d月%d日\n", year, month, day);
         printf("一年直至这一天需要%d天\n", days(year,month,day));
         printf("请输入年:");
    }
    printf("byb!\n");
    return 0;


} 
char *s_gets(char *st, int n)
{
    char *fa;
    char *find;
    fa = fgets(st, n, stdin);
    if(fa)
    {
        find = strchr(fa,'\n');
        if(find)
            *find = '\0';
        else
            while(getchar()!='\n')
                continue;
        
    }
    return fa;
}
int days(int year, int month, int day)
{
    int ch = 0;
    int i ;
    months[1].days = year % 4 == 0 ? 29 : 28;
    for(i= 0;i<month-1;i++)
    {
        ch += months[i].days;
    }
    return ch +day;


}

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

char *s_gets(char *st, int n);
int lower(char *st);
int days(int year, int month, int day);
struct month{
    char monthname[10];
    char abbrev[4];
    int days;
    int num_month;
};
struct month months[12] = {
    {"January", "Jan", 31, 1}, 
    {"February", "Feb", 28, 2}, 
    {"March", "Mar", 31, 3}, 
    {"April", "Apr", 30, 4}, 
    {"May", "May", 31, 5}, 
    {"June", "Jun", 30, 6}, 
    {"July", "Jul", 31, 7}, 
    {"August", "Aug", 31, 8}, 
    {"September", "Sep", 30, 9}, 
    {"October", "Oct", 31, 10},
    {"November", "Nov", 30, 11}, 
    {"December", "Dec", 31, 12}
};
int main(void)
{
    char god[10];
    int year, month, day;
    printf("请输入年:");
    while(scanf("%d", &year)==1)
    {
        printf("请输入月:");
        if(scanf("%d", &month)==1)
            ;
        else{
            int i;
            s_gets(god, 10);
            for(i=0;i<12;i++)
            {
                if(strcmp(god, months[i].monthname)==0||strcmp(god, months[i].abbrev)==0)
                {   
                    month = months[i].num_month;
                    break;
                }
            }
        }
         printf("请输入日:");
         scanf("%d", &day);
         printf("您输入了%d年%d月%d日\n", year, month, day);
         printf("一年直至这一天需要%d天\n", days(year,month,day));
         printf("请输入年:");
    }
    printf("byb!\n");
    return 0;


} 
char *s_gets(char *st, int n)
{
    char *fa;
    char *find;
    fa = fgets(st, n, stdin);
    if(fa)
    {
        find = strchr(fa,'\n');
        if(find)
            *find = '\0';
        else
            while(getchar()!='\n')
                continue;
        
    }
    return fa;
}
int days(int year, int month, int day)
{
    int ch = 0;
    int i;
    months[1].days = (year % 4 == 0 ? 29 : 28);
    for(i= 0;i<month-1;i++)
    {
        ch += months[i].days;
    }
    return ch + day;


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

使用道具 举报

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

char *s_gets(char *st, int n);
int lower(char *st);
int days(int year, int month, int day);
struct month{
    char monthname[10];
    char abbrev[4];
    int days;
    int num_month;
};
struct month months[12] = {
    {"January", "Jan", 31, 1}, 
    {"February", "Feb", 28, 2}, 
    {"March", "Mar", 31, 3}, 
    {"April", "Apr", 30, 4}, 
    {"May", "May", 31, 5}, 
    {"June", "Jun", 30, 6}, 
    {"July", "Jul", 31, 7}, 
    {"August", "Aug", 31, 8}, 
    {"September", "Sep", 30, 9}, 
    {"October", "Oct", 31, 10},
    {"November", "Nov", 30, 11}, 
    {"December", "Dec", 31, 12}
};
int main(void)
{
    char god[10];
    int year, month, day;
    printf("请输入年:");
    while(scanf("%d", &year)==1)
    {
        printf("请输入月:");
        if(scanf("%d", &month)==1)
            ;
        else{
            int i;
            s_gets(god, 10);
            for(i=0;i<12;i++)
            {
                if(strcmp(god, months[i].monthname)==0||strcmp(god, months[i].abbrev)==0)
                {   
                    month = months[i].num_month;
                    break;
                }
            }
        }
         printf("请输入日:");
         scanf("%d", &day);
         printf("您输入了%d年%d月%d日\n", year, month, day);
         printf("一年直至这一天需要%d天\n", days(year,month,day));
         printf("请输入年:");
    }
    printf("byb!\n");
    return 0;


} 
char *s_gets(char *st, int n)
{
    char *fa;
    char *find;
    fa = fgets(st, n, stdin);
    if(fa)
    {
        find = strchr(fa,'\n');
        if(find)
            *find = '\0';
        else
            while(getchar()!='\n')
                continue;
        
    }
    return fa;
}
int days(int year, int month, int day)
{
    int ch = 0;
    int i;
    months[1].days = (year % 4 == 0 ? 29 : 28);
    for(i= 0;i<month-1;i++)
    {
        ch += months[i].days;
    }
    return ch + day;


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

使用道具 举报

发表于 2020-5-19 21:01:11 | 显示全部楼层
楼上正解
我又慢了……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

也谢谢你帮忙找错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-13 17:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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