我正在编写一个程序,输出用户输入的最早日期,但会出现一些问题

时间:2017-09-29 16:11:42

标签: c

我正在编写这个程序,提示用户输入任意数量的日期,并在用户输入0/0/0时最早输出。但是在输入前2个日期后,我的程序会输出结果。当我输入更多日期时,它会不断比较它们,但最后它会给出错误的结果。请帮我修理一下。 这是我的代码

Cell B2

1 个答案:

答案 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可以移动到循环内部。

有效日期的范围检查......