c - 数组和 while scanf 崩溃

标签 c arrays while-loop 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 不同[任何其他] 它应该将其保存到数组中。但如果 arr[LEN] == 0 它应该停止 scanf 并将读取的数字保存到数组中,然后继续执行其他操作。几个数字之后,我的代码崩溃了。有人可以帮助我吗?

最佳答案

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

我认为这些更改将使您的代码对于所有值都能顺利工作。 另外,如果您想确保所有数组值都不同,则必须将当前输入值与所有先前存储的值进行比较。因为当前值可能与之前的值不同,但可能与之前输入的值相似。

关于c - 数组和 while scanf 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40805049/

相关文章:

c++ - 打印数组字符串的方法

php - 是否可以在 PHP 中引用匿名数组的特定元素?

awk - 在循环内使用 getline

c - 仅使用 while 和 if 对数组进行排序

objective-c - 将十进制转换为二进制并返回数组

c - 共享内存和 POSIX 信号量

c - MPI_Reduce 未按预期工作

javascript - 数组元素和对象属性比较返回 false

objective-c - 将 C 数组放入 Objective-C 结构属性中的意外失败

java - For 循环打印不正确 "."