为了账号安全,请及时绑定邮箱和手机立即绑定

用scanf输入值的问题

用scanf输入值的问题

C
星辉银河 2016-03-26 15:40:45
#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是怎么回事呢?
查看完整描述

1 回答

?
qq___524

TA贡献171条经验 获得超74个赞

把scanf的占位符改成%d就行了

%i 是老式写法,都是整型格式,i %表示 integer 表示整型值,默认为十进制数表示,
d %表示 decimal 明确地表明了这是一个十进制数表示。

查看完整回答
反对 回复 2016-03-27
  • 1 回答
  • 0 关注
  • 1488 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信