接受数组大小未知的输入

时间:2020-07-23 15:13:47

标签: arrays c input scanf eof

#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,它会导致输入的无限循环,以及如何在离线编译器中获得相似的结果?

1 个答案:

答案 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;
}