我在寫一個程序來獲取今天的日子,並在明天打印出來。但是,當我嘗試獲取今天的日期時,scanf函數似乎只讀取前四位數字。輸出是錯誤的。掃描功能只讀取輸入的4位數
例如:如果我把08 19 1995年,讀0作爲today.month,8 today.day,19 today.year
的代碼是:
//Write a function to print out tomorrow's date
#include <stdio.h>
#include <stdbool.h>
struct date
{
int month;
int day;
int year;
};
int main(void)
{
struct date today, tomorrow;
int numberofdays(struct date d);
//get today's date
printf("Please enter today's date (mm dd yyyy):");
scanf("%i%i%i",&today.month, &today.day, &today.year);
//sytax to find the tomorrow's date
if(today.day == numberofdays(today))
{
if(today.month==12) //end of the year
{
tomorrow.day=1;
tomorrow.month=1;
tomorrow.year=today.year+1;
}
else //end of the month
{
tomorrow.day=1;
tomorrow.month=today.month+1;
tomorrow.year=today.year%100;
}
}
else
{
tomorrow.day=today.day+1;
tomorrow.month=today.month;
tomorrow.year=today.year;
}
printf("\nTomorrow's date is:");
printf("%i/%i/%i\n",tomorrow.month,tomorrow.day,tomorrow.year);
return 0;
}
// A function to find how many days in a month, considering the leap year
int numberofdays(struct date d)
{
int days;
bool isleapyear(struct date d);
int day[12]=
{31,28,31,30,31,30,31,31,30,31,30,31};
if(d.month==2&&isleapyear(d)==true)
{
days=29;
return days;
}
else
{
days = day[d.month-1];
return days;
}
}
//a fuction to test whether it is a leapyear or not
bool isleapyear(struct date d)
{
bool flag;
if(d.year%100==0)
{
if(d.year%400==0)
{
flag=true;
return flag;
}
else
{
flag=false;
return flag;
}
}
else
{
if(d.year%4==0)
{
flag=true;
return flag;
}
else
{
flag=false;
return flag;
}
}
}
使用'「%i%i%i」'作爲格式字符串。 – 2015-02-23 21:43:09
我試過了,但它不起作用。 – silencefox 2015-02-23 21:44:20
你正確的使用'「%d%d%d」'。 '%i'可以讀取八進制數,所以08被讀作兩個數字,08不是一個好的八進制數,所以它被讀爲0,然後是8. – 2015-02-23 21:47:17