C-在此简单程序中获取分割故障(核心倾倒)错误



这是一个简单的程序,可以找到10阵列中最小,最大的元素。我不确定为什么要遇到分段故障(核心倾倒)错误。

#include <stdio.h>
int main(void) {
    int i, j, min, array[10], max, n;
    //This loop get user input for the elements of the array
    for(i = 0; i < 10; i++) {                   
        printf("Enter element number %d:", i);
        scanf("%d", &n);
        array[i] = n;
    }
    min = array[0];
    max = array[0];
    //This loop finds the smallest element of the array
    for(j = 0; j < 10; j++) {
        if(min > array[j]) {
            min = array[j];
        }
    }
    //This loop finds the largest element of the array
    for(j = 9; j >= 0; j++) {
        if(max < array[j]) {
            max = array[j];
        }
    }
    printf("smallest value is: %d", min);
    printf("largest value is: %d", max);
    return 0;
}
for(j = 9; j >= 0; j++)

应该是

for(j = 9; j >= 0; j--)

如果您想从最后一个到第一个迭代。您可以在第二次迭代中访问array[10],该迭代不在范围。

也没有理由从最后一个到第一个迭代,所以

for(j = 0; j < 10; j++)

也可以工作。

您可以在单个循环中完成整个工作(从stdin读取,查看它是否大于最大/小于最小),因此您不需要数组。

for (j = 9; j >= 0; j++)

在这里您从9开始,做J !

这样做:

for (j = 9; j >= 0; j--)

,您可以做这个

scanf("%d", array + i);

下面的循环试图指向超出分配的内存空间的位置。

for(j = 9; j >= 0; j++) 

而是尝试写作:

for(j=9; j >= 0; j--) 

如果您愿意的话,您可能会选择一个增量循环,如@MCH所建议。另外,作为建议,请在此处使用可变j跳过。您可以改用i。不会有任何问题,因为您将0分配给循环。您将节省4个宝贵字节。

相关内容

  • 没有找到相关文章

最新更新