【发布时间】:2020-11-13 08:54:48
【问题描述】:
#include <stdio.h>
int main()
{
int a[50],i,n=0;
while(scanf("%d",&a[n++])!=EOF);
n--;
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
return 0;
}
让,
输入:5 6 7 8 9
输出:5 6 7 8 9
我的问题是为什么上面的代码可以在 Online C 编译器中工作并给出正确的 EOF(-1)
但是,在像 Codeblocks 这样的离线 C IDE 中运行代码时,它会导致输入的无限循环,因为它没有给出任何 EOF,以及如何在离线编译器中获得类似的结果?
【问题讨论】:
-
难道不是因为 你 没有给出任何 EOF(Windows 上的 Ctrl+Z 或 Linux 上的 Ctrl+D)吗?
-
作为
while(scanf("%d",&a[n++])!=EOF);的替代品,您可以使用while(scanf("%d",&a[n++])==1);。然后循环将在第一个非整数输入处停止。 -
您还应该检查
n是否始终小于 50 -
还可以添加大小检查:
while(n < 50 && scanf("%d",&a[n++])==1); -
从
scanf中检查特定1的另一个原因是,如果您输入无法转换的数据,您将进入无限循环,因为0 != EOF也是如此。