【发布时间】:2013-05-04 15:11:43
【问题描述】:
我正在编写一个程序来计算两个日期之间经过的天数。为此,我必须在这样定义的结构中将日期作为整数输入:
struct date {
int month;
int day;
int year;
};
现在,我已经弄清楚了如何运行我的程序,但是当月份或日期为个位数时,用户无法以 (mm dd yyyy) 格式输入日期,这让我很烦恼。让我给你看我的代码(请不要介意调试 printf 语句):
printf("Enter your start date (mm dd yyyy)\n");
scanf("%i %i %i", &startDate.month, &startDate.day, &startDate.year);
// DEBUG printf("Start date = %i/%i/%i\n", startDate.month, startDate.day, startDate.year);
// DEBUG printf("start date month = %i", startDate.month);
printf("Enter your end date (mm dd yyyy)\n");
scanf("%i %i %i", &endDate.month, &endDate.day, &endDate.year);
// DEBUG printf("End date = %i/%i/%i\n", endDate.month, endDate.day, endDate.year);
如果用户输入:
08 08 2004
那么开始日期记录为
0/8/0
等于用户输入的前三位数字。好的,我明白了。我也明白用户可以输入“8 8 2004”并且程序运行良好......但我相信编程是关于细节的,这个是一个错误。谁能帮我解决这个问题?
【问题讨论】:
-
如果您尝试输入
8 25 2004是否有效?另外,尝试用%ds 替换%is。 -
我认为您最好将输入作为字符串读取,并使用 getdate() 或 strptime() 之类的方法将字符串解析为所需的表示形式。此外,您可以查看更高级的库来减轻您的工作负担。此外,我建议不要使用 scanf() 进行用户输入 - 太多的事情可能会出错。