为什么即使满足退出条件,我的C程序也不会跳出while循环

时间:2015-04-28 11:11:45

标签: c loops

#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循环中没有更多的迭代。

2 个答案:

答案 0 :(得分:4)

更好的结束循环条件是

while (scanf("%d", &value) == 1)

这意味着scanf()正在成功地读取值。

阅读链接以了解原因,在使用scanf()时,等待EOF并不自然,因为用户必须按下组合键以标记stdinEOF

这个组合实际上是如此的笨拙,以至于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;
}