阵列,虽然scanf函数崩溃
问题描述:
#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[any other]
不同,应该将其保存到阵列中的数字。但是,如果arr[LEN] == 0
它应该停止scanf
并将读取的数字保存到数组中,然后继续其他的东西。几个数字后,我的代码崩溃了。有人能帮助我吗?阵列,虽然scanf函数崩溃
答
- 在for循环中,您需要使用arr [i]而不是
arr[LEN]
。实际上,arr[LEN]
声明会创建一个名称为arr的数组,索引范围从0
到LEN-1
。所以arr[LEN]
超出了你的数组范围。您需要使用&arr[i]
而不是arr[LEN]
。 - 在
if
条件中,您需要编写if(arr[i] == arr[i-1])
,因为您可以只将当前输入值与以前的值进行比较,而不是下一个尚未输入的值。但请确保您单独处理i=0
的这种情况,因为i-1
不会是数组的元素。
我认为这些更改会使您的代码在所有值上顺利运行。 此外,如果您想确保所有数组值不同,则必须将当前输入值与以前存储的所有值进行比较。因为当前值可能与之前的值不同,但可能与之前输入的值相似。
请花点时间试试键入答案的文本框上方的图标(您始终可以取消更改)。他们可以将您的文本墙变成更可读,更容易理解的文字,而且只需少量额外的工作。 – Anthon
如果转换成功,scanf(“%d”,&arr [i])的返回值为1;如果输入中有数据但它不与一个十进制整数(例如一个字母)或EOF(总是负数,通常为-1)不匹配(如果没有数据要读取或者出现一些错误),它将为0正在读取的设备。 ['scanf()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/scanf.html)函数永远不会返回输入的长度。如果有多个转换规范,它将返回成功转换的数量 - 但是被抑制的分配('%* d'等)和'%n'不计算在内。 –
我不能对其他方面的好答案进行投票,直到你修正第4项为止。 –