#define LEN 200
int main()
{
int arr[LEN],i;
for (i =0; i < LEN; i++)
while(scanf("%d", arr[LEN]) == 1){
if((arr[LEN] == arr[LEN]+1) || arr[LEN] < 0){
printf("Bad numbers.\n");
}
else if(arr[LEN] == 0){
break;
}
}
printf("Break");
return 0;
}
我的观点是,如果我写的数字不同且大于 0,并且 arr[5]
与 a[12]
或 a 不同[任何其他]
它应该将其保存到数组中。但如果 arr[LEN] == 0
它应该停止 scanf
并将读取的数字保存到数组中,然后继续执行其他操作。几个数字之后,我的代码崩溃了。有人可以帮助我吗?
最佳答案
- 在 for 循环内,您需要使用 arr[i] 而不是
arr[LEN]
。说实话,arr[LEN]
声明创建了一个名称为 arr 的数组,索引范围为0
到LEN-1
。因此arr[LEN]
超出了数组的范围。 - 在
scanf
中,您需要使用&arr[i]
而不是arr[LEN]
。 - 在
if
条件中,您需要编写if(arr[i] == arr[i-1])
因为您只能将当前输入值与先前输入值进行比较值,而不是尚未输入的下一个值。但请确保为i=0
单独处理此条件,因为这样i-1
将不是数组的元素。
我认为这些更改将使您的代码对于所有值都能顺利工作。 另外,如果您想确保所有数组值都不同,则必须将当前输入值与所有先前存储的值进行比较。因为当前值可能与之前的值不同,但可能与之前输入的值相似。
关于c - 数组和 while scanf 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40805049/