鱼C论坛

 找回密码
 立即注册
查看: 1135|回复: 2

请版主帮忙删帖

[复制链接]
发表于 2022-1-8 10:54:20 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 小伊布 于 2022-1-9 10:31 编辑
#include <stdio.h>
#include <string.h>

_Bool IS(int year){ //是否是闰年
    return (year%4==0 && year%100!=0) || year%400==0;
}

int Year(int year){ //闰年366天,非闰年365天
    if(IS(year))
        return 366;
    else
        return 365;
}

int main(){
    int a[2][13] = {
        {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
        {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
    };
    char Month[13][12] = {
        "", "January", "February", "March", "April", "May", "June", "July",
        "August", "September", "October", "November", "December"
    };
    char Week[7][9] = {
        "Sunday", "Monday", "Tuesday", "Wednesday",
        "Thursday", "Friday", "Saturday"
    };
    int year, month, week, day;
    int num, row, i, y;
    char M[12];

    while(scanf("%d %s %d", &day, M, &year) != EOF){
        num=0;
        y=1;
        while(y<year){ //公元1年到输入年份之间经过的天数
            num += Year(y);
            y++;
        }
        for(i=0; i<=13; i++){ //根据输入的英文月份找到第几月
            if(!strcmp(M, Month[i]))
                month = i;
        }
        row = IS(year);
        for(i=0; i<=month; i++){ //计算该年份经过的天数
            if(i==month)
                num += day;
            else
                num += a[row][i];
        }
        week = num % 7;
        printf("%s\n", Week[week]);
    }

    return 0;
}

代码有时候会连续输出两个字符串,为什么出现这种情况呢?


再问个小白问题,我想debug找到问题,输入后要经过2000多次循环,怎么跳过这一段程序直接调试后面的?如果一开始直接跳到后面debug,就没有输入了。
BX1LUZLZP0I591P7J5R8EYI.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-1-8 11:35:15 | 显示全部楼层
已找到问题所在,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-8 12:07:14 From FishC Mobile | 显示全部楼层
我的代码供参考:
#include <stdio.h>
#include <string.h>

char *month[12] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
char *week[7] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

int isLeap(int y){return !(y%4) && y%100 || !(y%400);}

int days(int d, int m, int y){
        int res = d;
        while(--m){
                if(m!=2) res += ((m%2) && (m<8)) || (!(m%2) && (m>7))? 31 : 30;
                else res += isLeap(y) ? 29 : 28;
        }
        while(--y) res += isLeap(y) ? 366 : 365;
        return res;
}

int function(){
        int d, m, y;
        char mth[10];
        if(scanf("%d%s%d", &d, mth, &y) == EOF) return 0;
        for(int i = 0; i < 12; i++) if(!strcmp(mth, month[i])) m = i+1;
        printf("%s\n", week[days(d, m, y)%7]);
        return 1;
}

int main(){
        while(function());
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-18 18:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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