在 c 中获得多个输入的最佳方法是什么?

What would be the best way to get multiple inputs in c?

我得到了一个任务来获取输入列表并使用它(使用本身并不重要)。 输入将仅以 EOF 结束。我需要获取一个数字列表并填充一个大小为 n 的数组。每个数字都用白色字符分隔。我输入的也需要检查,因为它没有承诺它是有效的。

我有几种方法可以做到这一点,我想知道什么是最好的以及为什么。 (也许我什至没有考虑最好的解决方案,所以非常欢迎任何建议)

我用ubuntu.

解决方案一: 使用 getchar() 直到 EOF,同时检查白色字符以分隔数字。

方案二: 使用 scanf() 做类似的事情:

char str[256];

while (scanf("%s", str) != EOF)
{
    // Check the input and add to the array.
}

我认为这是最好的解决方案,但问题是我需要按两次 control + d 来结束输入,但它无效。

方案三: 使用 fgets() 并读取到缓冲区并使用缓冲区。我认为这会使问题复杂化,因为一个整数可以拆分为 2 个缓冲区。

感谢所有帮助者。

通常,使用 scanf 验证输入很困难。但是对于像这样的简单输入,你可以这样做:

while( scanf("%d", &n) == 1 ){
    /* add n to the array. */
}
if( ferror(stdin) ){
    fprintf(stderr, "Read error\n");
} else if( ! feof(stdin) ){
    fprintf(stderr, "Invalid input\n");
}

while 循环将在 EOF 或无效条目时终止。 feof() 将决定输入流是否关闭。