#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,它会导致输入的无限循环,以及如何在离线编译器中获得相似的结果?
答案 0 :(得分:1)
scanf()
函数返回其扫描的输入值的数量。
如果输入错误或失败,它将返回EOF
。
如注释中所建议,您可以将scanf()
返回值与1进行比较,以查看其是否具有有效的输入。因此,如果您输入的内容不是int
,它将结束循环。
在调用n
之前确保scanf()
仍在数组范围内是一个好主意。
所以您可以编写这样的代码
#include <stdio.h>
int main ()
{
int a[50], n = 0;
while((n < 50) && (scanf("%d", &a[n++]) == 1));
n--;
for (int i = 0; i < n; i++)
{
printf("%d", a[i]);
}
return 0;
}