我必须编写一个程序,从 stdin 读取整数并在 EOF 或输入无效时停止读取。测试无效输入时,我收到一条消息,内容为“段错误(核心已转储)” 当存在无效输入时,我将如何退出循环?这是我的代码:
int main()
{
int num, temp, x, j;
int i = 0;
int arr[ARRAY_MAX];
while (scanf("%d", &num) != EOF)
{
arr[i] = num;
i++;
}
for (x = 0; x < i; ++x)
{
for (j = x+1; j < i; ++j)
{
if (arr[j] < arr[x])
{
temp = arr[x];
arr[x] = arr[j];
arr[j] = temp;
}
}
}
printf("%d\n", arr[1]);
return EXIT_SUCCESS;
}
最佳答案
因为无效输入 scanf()
将返回 0
而不是 EOF
,您必须检查 scanf( )
正确,在这种情况下,对于有效输入,它应该是 1
。
如果第一个值是无效输入,scanf()
将失败并且num
将未初始化,从而在您读取时导致未定义的行为它分配给数组元素。
while ((scanf("%d", &num) == 1) && (i < ARRAY_MAX))
是检查的方法。
然而,段错误似乎是因为您没有验证 i
的大小不足以溢出数组。我也在上面的代码中修复了这个问题。
关于c - C 中的无效输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42012677/