我正在尝试在Eclipse中运行以下代码,但是控制台保持空白,直到我停止程序为止输出“输入下一个值(<= 0 to退出)2130567168分钟为35509452小时,48分钟。”一遍又一遍地重复。

似乎SCANF出于某种原因正在投入一些默认值...无法弄清楚原因。在程序停止之前,我没有看到任何东西,所以我认为这可能与printf没有被冲洗有关,但是我确保使用 n强制冲洗。

有任何想法吗?

#include <stdio.h>
const int MIN_PER_HOUR = 60;  // minutes per hour

int main(void)
{
 int hour, min, left;

 printf("Convert minutes to hours and minutes!\n");
 printf("Enter the number of minutes (<=0 to Quit):\n");

 scanf("%d", &min);    // read number of minutes

 while(min > 0){
  hour = min / MIN_PER_HOUR; // truncated number of hours
  left = min % MIN_PER_HOUR; // number of minutes left over

  printf("%d minutes is %d hours, %d minutes.\n", min, hour, left);

  printf("Enter next value (<=0 to quit)");
  scanf("%d", &min);
 }
 printf("Done!\n");

 return 0;
}
有帮助吗?

解决方案

Eclipse的终端模拟器可能会有所不同,并且可以进行更多的缓冲。尝试打电话 fflush(stdout); 在打印输出和调用之间 scanf().

其他提示

我将代码移至Visual C ++中,并且可以按预期工作。我猜我的问题应该是:“为什么日食中的末端仿真?”

如果有一个无效的字符用于表示输入中的整数 scanf(), ,功能将停止在该字符上, 将其留在缓冲区中,准备再次阅读 又一次...

假设您进入了第一个“ 14分钟” scanf(). 。该功能读取“ 14”,并在空间停止。然后将14分配给变量 min 该程序仍在继续。

然后,在循环内,程序执行另一个 scanf(). 。这次,输入缓冲区已经有了东西 - 即带有空间的“分钟”。 scanf() 将读取并忽略空间,找到一个“ M”,它不能转换为整数并停止而不为变量分配新值 min返回价值 0. 。再次……又一次……又一次。

因此,您要做的就是清除输入缓冲区 scanf().

您清楚多少?
大概就输入而言 - 大约相同 fgets() 做 :)
例如:

int ch;
scanf("%d", &min);
do { ch = getchar(); } while (ch != '\n'); /* empty buffer */
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top