这是一个简单的程序,可以找到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个宝贵字节。