猿问

用scanf输入值的问题

#include <stdio.h>
#include <stdbool.h>

struct date
{
    int year;
    int month;
    int day;
};

int f(struct date d)
{
    if(d.month<=2)
        return d.year-1;
    else
        return d.year;
}

int g(struct date d)
{
    if(d.month<=2)
        return d.month+13;
    else
        return d.month+1;
}

int calculateN(struct date d)
{
    int N;
    N=1461*f(d)/4+153*g(d)/5+d.day;
    return N;
}

int calculateDay(struct date d1,struct date d2)
{
    int day,d1N,d2N;
    d1N=calculateN(d1);
    d2N=calculateN(d2);
    day=d1N-d2N;
    if(day<0)
        day=-day;
    return day;
}

int main(void)
{
    struct date d1,d2;
    printf("Please enter two date(YYYY MM DD): \n");
    printf("The first: ");
    scanf("%i %i %i",&d1.year,&d1.month,&d1.day);
    printf("\nThe second: ");
    scanf("%i %i %i",&d2.year,&d2.month,&d2.day);
    printf("\nThe day between the two date is: %i",calculateDay(d1,d2));
    printf("\n %i %i",calculateN(d1),calculateN(d2));
    
    return 0;
}

这里我输入第一个日期输入2004 08 08时,d1.year=2004, d1.month=0, d1.day=8,

而第二个日期输入2005 02 02时,d2.year=0, d2.month = 8, d2.day=2005,

请问这些日期错乱和变成0是怎么回事呢?

星辉银河
浏览 1489回答 1
1回答

qq___524

把scanf的占位符改成%d就行了%i 是老式写法,都是整型格式,i %表示 integer 表示整型值,默认为十进制数表示,d %表示 decimal 明确地表明了这是一个十进制数表示。
随时随地看视频慕课网APP
我要回答