我正在编写这个程序,提示用户输入任意数量的日期,并在用户输入0/0/0时最早输出。但是在输入前2个日期后,我的程序会输出结果。当我输入更多日期时,它会不断比较它们,但最后它会给出错误的结果。请帮我修理一下。 这是我的代码
Cell B2
答案 0 :(得分:1)
第一次使用year, moth, day
时,他们缺少初始化。
// int month, day, year;
int month = -1;
int day = 0;
int year = 0;
// ...
while(month != 0 && day != 0 && year != 0)
否则OP已关闭,但需要更改最早的日期,因为会出现各种新日期。 @Barmar。在循环之后打印一次最早的日期。
循环退出条件测试需要在数据输入后立即进行。
while (1) {
printf("Enter a date (mm/dd/yy): ");
scanf("%d/%d/%d", &month, &day, &year);
printf("%d/%d/%d is the date entered\n", month, day, year);
if (!(month != 0 && day != 0 && year != 0)) {
break;
}
int earlier = 0;
if (year < year2) {
earlier = 1;
} else if (year == year2) {
if (month < month2) {
earlier = 1;
} else if (month == month2) {
if (day < day2) {
earlier = 1;
}
}
}
if (earlier) {
year2 = year;
month2 = month;
day2 = day;
}
}
printf("%d/%d/%d is the earliest date\n", month2, day2, year2);
其他改进包括:
读取一行输入然后解析日期。
检查扫描错误。
刷新输出以确保在输入之前出现提示。
printf("Enter a date (mm/dd/yy): ");
fflush(stdout);
使用更好的名称..而不是year2
,也许是early_year
?
一个do
循环而不是while
循环,因为循环至少迭代一次。此外,month, day, year
可以移动到循环内部。
有效日期的范围检查......