【发布时间】:2010-12-26 05:11:06
【问题描述】:
我正在尝试在 Eclipse 中运行以下代码,但控制台保持空白,直到我停止程序,此时输出“输入下一个值(
似乎 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;
}
【问题讨论】:
-
scanf 是一个愚蠢的函数 - “使用 scanf 进行体面的错误恢复几乎是不可能的;通常读取整行(使用 fgets 等)然后解释它们要容易得多,或者使用 sscanf或其他一些技术。” - 见eskimo.com/~scs/C-faq/q12.20.html
-
检查 scanf 的返回值,它可能会提供更多见解
-
我正在尝试学习 C,这就是我被教导的内容。令人沮丧的是,即使我认为代码是正确的,它也不起作用。
-
有一些实现可以正常工作。不幸的是,您显然正在使用一个没有。 fgets/sscanf 解决方案适用于所有平台,因此它不是无用的信息。
-
绝对没有用!谢谢沃利克!