阵列,虽然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函数崩溃

  1. 在for循环中,您需要使用arr [i]而不是arr[LEN]。实际上,arr[LEN]声明会创建一个名称为arr的数组,索引范围从0LEN-1。所以arr[LEN]超出了你的数组范围。您需要使用&arr[i]而不是arr[LEN]
  2. if条件中,您需要编写if(arr[i] == arr[i-1]),因为您可以只将当前输入值与以前的值进行比较,而不是下一个尚未输入的值。但请确保您单独处理i=0的这种情况,因为i-1不会是数组的元素。

我认为这些更改会使您的代码在所有值上顺利运行。 此外,如果您想确保所有数组值不同,则必须将当前输入值与以前存储的所有值进行比较。因为当前值可能与之前的值不同,但可能与之前输入的值相似。

+0

请花点时间试试键入答案的文本框上方的图标(您始终可以取消更改)。他们可以将您的文本墙变成更可读,更容易理解的文字,而且只需少量额外的工作。 – Anthon

+0

如果转换成功,scanf(“%d”,&arr [i])的返回值为1;如果输入中有数据但它不与一个十进制整数(例如一个字母)或EOF(总是负数,通常为-1)不匹配(如果没有数据要读取或者出现一些错误),它将为0正在读取的设备。 ['scanf()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/scanf.html)函数永远不会返回输入的长度。如果有多个转换规范,它将返回成功转换的数量 - 但是被抑制的分配('%* d'等)和'%n'不计算在内。 –

+0

我不能对其他方面的好答案进行投票,直到你修正第4项为止。 –