【发布时间】:2022-01-13 16:53:56
【问题描述】:
我有一个任务是获取输入列表并使用它(使用本身并不重要)。 输入将仅以 EOF 结束。我需要获取一个数字列表并填充一个大小为 n 的数组。每个数字都用白色字符分隔。我的输入也需要检查,因为它没有被承诺它是有效的。
我有几种方法可以做到这一点,我想知道什么是最好的以及为什么。 (也许我什至没有考虑最好的解决方案,所以非常欢迎任何建议)
我用的是 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( "%d", &number)为每个数字(整数)或%g浮点数? -
您不需要“按两次 control + d”。您可以以非交互方式传递输入;
echo 1 3 5 | ./a.out或从文件重定向。如果您确实以交互方式传递输入,则使用^d两次关闭输入流没有任何无效。不过,您可能不必这样做,<ret>^d也可以正常工作。 -
由于输入可能无效,scanf %d 将不起作用,因为它会挂在非数字上。使用 fgets 或 scanf %s