gpt4 book ai didi

c - C 中的无效输入

转载 作者:太空宇宙 更新时间:2023-11-04 08:07:09 24 4
gpt4 key购买 nike

我必须编写一个程序,从 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com