#include<stdio.h>
#include <limits.h>
int main()
{
int value;
int smallest = INT_MAX;
printf("This is a program that finds out the minimum \nof serveral integers you entered.");
printf("Please type in these integers: ");
while(scanf("%d", &value) != EOF)
{
printf(" ");
if(value <= smallest)
{
smallest = value;
printf("%d", smallest); // to trace the while loop
}
}
printf("\nThe smallest integer is: %d", smallest); // this will execute once the program is stopped
return 0;
}
此代码可以成功找到最小的整数,但只是不打印
的结果printf("\nThe smallest integer is: %d", smallest);
..直到我从我的C语言中停止程序。我不明白为什么它不会立即打印,因为while
循环中没有更多的迭代。
答案 0 :(得分:4)
更好的结束循环条件是
while (scanf("%d", &value) == 1)
这意味着scanf()
正在成功地读取值。
阅读链接以了解原因,在使用scanf()
时,等待EOF
并不自然,因为用户必须按下组合键以标记stdin
与EOF
。
这个组合实际上是如此的笨拙,以至于Linux终端 Ctrl + D 和Windows cmd windows Ctrl + Z 不一样。
如果它没有执行printf()
语句,那是因为您需要刷新stdout
,要么添加fflush(stdout)
,要么添加'\n'
每一行的结尾,最后添加一个换行更自然,虽然我看到许多人将它添加到了beinning。
答案 1 :(得分:1)
你不能那样使用EOF,因为 scanf()在成功阅读后返回值1. scanf()不会返回它读取的字符。我已经在下面给出了解决方案,我认为它可以按照您的意愿工作。对于下面的任何查询评论。
#include<stdio.h>
#include <limits.h>
int main()
{
int value;
int smallest = INT_MAX;
printf("This is a program that finds out the minimum \nof serveral integers you entered.");
printf("Please type in these integers (Enter any other character to terminate): ");
while(scanf("%d", &value))
{
if(value <= smallest)
{
smallest = value;
printf("smallest till now: %d\n", smallest); // to trace the while loop
}
else
printf("smallest till now: %d\n", smallest); // to trace the while loop
}
printf("\nThe smallest integer is: %d\n", smallest); // this will execute once the program is stopped
return 0;
}