注册 登录
编程论坛 C语言论坛

pta上一道题有一个测试点不过,不是格式问题,求大佬解答。

魂之子 发布于 2019-12-25 16:52, 2118 次点击
问题描述:
只有本站会员才能查看附件,请 登录

#include<stdio.h>
#include<stdlib.h>
int leapyear (int year);


int main(){
    char s[11];
    char s2[5];
    char s3[5];char s4[5];
    scanf("%s",s);
    int i;
    for(i=0;i<4;i++ ){
        s2[i]=s[i];
    };
    for(i=5;i<7;i++ ){
        s3[i-5]=s[i];
    };
        for(i=8;i<10;i++ ){
        s4[i-8]=s[i];
    };
    int num1,num2,num3;
    num1=atoi(s2);    num2=atoi(s3);    num3=atoi(s4);
    //printf("%d",num1);
    int mou;
    if(leapyear(num1)){
        switch(num2){
        case 1:mou=0;break;
        case 2:mou=31;break;
        case 3:mou=31+29;break;
        case 4:mou=31+29+31;break;
        case 5:mou=31+29+31+30;break;
        case 6:mou=151;break;
        case 7:mou=181;break;
        case 8:mou=212;break;
        case 9:mou=243;break;
        case 10:mou=273;break;
        case 11:mou=304;break;
        case 12:mou=334;break;
        }
    }else switch(num2){
        case 1:mou=0;break;
        case 2:mou=31;break;
        case 3:mou=31+28;break;
        case 4:mou=31+28+31;break;
        case 5:mou=31+28+31+30;break;
        case 6:mou=150;break;
        case 7:mou=180;break;
        case 8:mou=211;break;
        case 9:mou=242;break;
        case 10:mou=272;break;
        case 11:mou=303;break;
        case 12:mou=333;break;
        }
        int sum=0;
        sum=mou+num3;
        printf("%d\n",sum);
    //    printf("%d\n",mou);printf("%d\n",num3);
        
    return 0;
   
}
int leapyear(int year){
    if(year%4==0){
        if(year%100==0&&year%400!=0){
            return 0;
        }else return 1;
    }else return 0;
}
5 回复
#2
rjsp2019-12-25 16:56
atoi 要求参数是以'\0'结尾的字符串,否则属于未定义行为
#3
rjsp2019-12-25 17:03
大体代码应该是这样:

int main( void )
{
    unsigned y,m,d;
    scanf( "%u /%u /%u", &y, &m, &d );

    const unsigned mds[] = { 0,0,31,31+28,31+28+31,……这里是每个月之前的天数…… };
    bool plusone = 是闰年且月份大于2吗?
    printf( "%u\n", mds[m] + d + plusone );
}
#4
魂之子2019-12-25 17:40
回复 2楼 rjsp
我感觉这个没啥毛病吧,我定义的字符串全都有空余单元啊。
#5
魂之子2019-12-25 17:45
回复 3楼 rjsp
哥,我看不太懂,刚刚入手
只有本站会员才能查看附件,请 登录
但是我感觉整体上是没有问题的,我的程序有一个测试点没有过,我不知道我哪块有问题,感觉是哪块算错了。
#6
rjsp2019-12-25 20:09
代码中存在"未定义行为"就不要谈论其它小错误了。
一定要谈,我贴出所有数组,你自己对照一下吧
{0,31,59,90,120,151,181,212,243,273,304,334}
{0,31,60,91,121,152,182,213,244,274,305,335}
1