标题不好描述,抱歉。
问题:
对于下列程序:
#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就不会有问题。
scanf顺序读取重定向的数字,在四个数字都读完之后,scanf继续读取是读取错误了的,没有改变i的值,仍然为最后读取的1,肯定大于0,如此往复就死循环了。