Eclipse / MinGW中的scanf问题

时间:2009-12-13 18:15:33

标签: c eclipse printf scanf

我正在尝试在eclipse中运行以下代码,但控制台保持空白,直到我停止程序,此时输出“输入下一个值(< = 0退出)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;
}

5 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

我将代码移动到visual C ++中,它按预期工作。我想我的问题应该是:“为什么eclipse中的终端仿真会被破坏?”

答案 2 :(得分:1)

如果在scanf()的输入中有一个无效字符用于表示整数,则该函数将停在该字符处,将其保留在缓冲区中,准备再次读取,然后再次,再次......

假设您为第一个scanf()输入了“14分钟”。该函数读取“14”并在空格处停止。然后它将14分配给变量min,程序继续。

然后,在循环内,程序执行另一个scanf()。这次输入缓冲区已经有了东西 - 即带有空格的“分钟”。 scanf()将读取并忽略该空格,找到一个无法转换为整数的“m”,并在不为变量min指定新值且返回值{的情况下停止{1}} 即可。再次......再次......再次。

因此,您需要做的是在每0之后清除输入缓冲区。

你清楚了多少? 可能就输入而言 - 大致相同scanf()确实:) 例如:

fgets()

答案 3 :(得分:1)

问题:运行代码时控制台变为空白,再次尝试运行时出现错误。

答案:首先,打开任务管理器(按alt + ctrl +删除键)并转到详细信息(在Windows 10中)。在列表中找到您的文件,右键单击该文件,然后单击“结束任务”。

第二,在每个fflush(stdout);printf语句之间使用scanf

例如:

printf("Enter number 1");
fflush(stdout);
scanf("%d",&a);
printf("Enter number 2");
flush(stdout);
scanf("%d",&b);

答案 4 :(得分:0)

ECLIPSE模拟器应该有所不同,并进行更多缓冲。

尝试每次在fflush(stdout);printf();之间调用scanf();

这可能对您有帮助。