C程序一个,关于输入重定向有点问题

标题不好描述,抱歉。
问题:
对于下列程序:

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv) 
{
    int i = 0;
    while(1)
    {
        scanf("%d",&i);
        if (i <= 0) break;
        printf("i > 0\n");
    }
    return 0;
}

创建文本文件 input ,内容如下:

2
2
4
1

然后用重定向把input重定向到a.out
./a.out < input
结果程序死循环输出
i > 0
这是为什么?如果在input最后加个0就不会有问题。

阅读 2.6k
2 个回答

scanf顺序读取重定向的数字,在四个数字都读完之后,scanf继续读取是读取错误了的,没有改变i的值,仍然为最后读取的1,肯定大于0,如此往复就死循环了。

你那个输入文件里的值都大于 0, 当然不会执行 break, 退出循环了.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进