(结构体之时间设计)这样子写可以吗?在线编译为什么不通过,使用dev可以通过

在线编译为什么不通过?

# include <stdio.h>
/*定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题。*/ 
/*
    普通闰年:
        年份是4的倍数,且不是100的倍数;
    实际闰年:
        年份是4的倍数,且必须是400的倍数; 
*/

typedef struct DATA{
    int year;
    int mon_get;
    int month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int day;
}Data;

int main(){
    Data data;
    int count_day = 0;   //表示天数 
    int pos = 0;  //标记是否为一月 
    
    scanf("%d %d %d", &data.year, &data.mon_get, &data.day);
    if ((data.year%4 == 0 && data.year%100 != 0) || data.year%400 == 0)  //如果是世纪闰年 
        data.month[1] = 29;
    for (int i=1; i<data.mon_get; ++i){
        count_day += data.month[i-1];
        pos++;
    }
    count_day += data.day;
    if (pos == 0)
        count_day = data.day; 
    printf("%d\n", count_day);
    
    return 0;
} 

这也许就是在线编译器的局限性了吧!
在线编译器没有线下编译器那么强大,功能也没有那么齐全。
在线编译器可能只是可以编译一些简单的逻辑代码,复杂一点的应该就编译不过了,所以还是老老实实用离线的编译器吧,例如Visual Studio等

定义结构体时,结构体中数组不能初始化赋值.
要在定义结构体变量data时再进行初始化赋值.你题目的解答代码如下:

# include <stdio.h>
/*定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题。*/
/*
    普通闰年:
        年份是4的倍数,且不是100的倍数;
    实际闰年:
        年份是4的倍数,且必须是400的倍数;
*/

typedef struct DATA{
    int year;
    int mon_get;
    int month[12];
    int day;
}Data;

int main(){
    Data data = {0,0, {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} ,0};
    int count_day = 0;   //表示天数
    int pos = 0;  //标记是否为一月

    scanf("%d %d %d", &data.year, &data.mon_get, &data.day);
    if ((data.year%4 == 0 && data.year%100 != 0) || data.year%400 == 0)  //如果是世纪闰年
        data.month[1] = 29;
    for (int i=1; i<data.mon_get; ++i){
        count_day += data.month[i-1];
        pos++;
    }
    count_day += data.day;
    if (pos == 0)
        count_day = data.day;
    printf("%d\n", count_day);

    return 0;
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632