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

标签 c ubuntu input stdio

我得到了一个任务来获取输入列表并使用它(使用本身并不重要)。
输入将仅以 EOF 结束。我需要获取一个数字列表并填充一个大小为 n 的数组。每个数字都用白色字符分隔。我的输入也需要检查,因为它没有被 promise 它是有效的。
我有几种方法可以做到这一点,我想知道什么是最好的以及为什么。
(也许我什至没有考虑最好的解决方案,所以非常欢迎任何建议)
我使用ubuntu。
解决方案1:
在检查白色字符以分隔数字时使用 getchar() 直到 EOF。
解决方案2:
使用 scanf() 做这样的事情:

char str[256];

while (scanf("%s", str) != EOF)
{
    // Check the input and add to the array.
}
我认为这是最好的解决方案,但问题是我需要按两次 control + d 才能结束输入,这是无效的。
解决方案3:
使用 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()将决定输入流是否关闭。

关于c - 在c中获得多个输入的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70280084/

相关文章:

Char 未转换为 int

javascript - 使 DIV 充当 INPUT 字段

javascript - 为什么我无法通过 javascript 访问隐藏输入元素的值?

c - 如何在 C 中传递参数以便可以更改值?

javascript - 如何从 Mozilla Rhino 的 Javascript 调用 C++

c++ - 为什么 itoa() 修改传递的 char[] 而不是返回 char[]?

linux -/etc/network/interfaces 中的默认网关被忽略

php - 如何使用 AGI 从调用队列(Asterisk Dialplan)获取接收者详细信息?

linux - 如何在 JDK 中启用 32 位二进制兼容性?

C++ int 或 double 输入