我很难从用户输入的日期格式mm / dd / yy中找到最早的日期。 我确实写了一个打印更大日期的解决方案,但是最低日期总是显示为0/0/0,因为如果键入/ 0/0/0,我将打破while循环。
代码如下:
int main(int argc, const char * argv[])
{
int month, day, year, earliestDay = 0, earliestMonth = 0 , earliestYear=0;
printf("Enter a date (mm/dd/yy): ");
scanf("%d/%d/%d", &month, &day, &year);
while (day && month && year !=0){
printf("Enter a date (mm/dd/yy): ");
scanf("%d/%d/%d", &month, &day, &year);
if ( earliestDay <= day)
earliestDay = day;
if (earliestMonth <= month)
earliestMonth = month;
if (earliestYear <= year)
earliestYear = year;
}
printf("%d/%d/%d is the greatest date!\n", earliestMonth, earliestDay, earliestYear);
}
如果有人能向我解释如何打印最低价,我将不胜感激。 提前谢谢!
答案 0 :(得分:1)
正如@RJFalconer所说,你需要正确地初始化事物。
此外,如果您的“最佳日期”解决方案使用了类似的逻辑,我认为您没有很好地测试它:您不能独立地对待年,月和日。按照您的逻辑,如果输入了01/30/99
和12/01/50
,则会将12/30/99
报告为最大日期,此时它不是输入日期之一!相反,你需要像以下逻辑:
day1 < day2 IF day1.year < day2.year OR
(day1.year==day2.year AND (day1.month < day2.month OR
(day1.month==day2.month AND day1.day < day2.day)))
答案 1 :(得分:0)
在循环中搜索最小/最大值的惯用方法是
#include <limits.h>
int earliestDay = INT_MAX;
while (...) {
earliestDay = min(earliestDay, day);
}
或
#include <limits.h>
int latestDay = INT_MIN;
while (...) {
latestDay = max(latestDay, day);
}
答案 2 :(得分:0)
在咨询了你的回复后,我认为我找到了正确的方法。请再看一次,看看它是否正常,即使你测试它也可以。
编辑后的代码是:
1.197.XXXX
1.197.XXX
1.195.XXXX
1.195.XXX
1.193.XXXX
1.193.XXX
1.191.XXXX
1.191.XXX