我正在制作一个程序,在数组中找到最小的数字而不对其进行排序。输出始终为0.请解释我为什么?
#include<stdio.h>
#include<conio.h>
void main() {
int num[5] = {5, 2, 1, 6, 9}, i, j;
int min = num[0];
for (i=0; i<5; i++) {
if (min > num[i+1]) {
min = num[i+1];
}
}
printf("Smallest number is %d", min);
getch();
}
答案 0 :(得分:1)
当i
为4
时,您正在访问超出数组num[5]
范围的num
。无法保证num[5]
会是什么,但大多数情况下,在新内存分配后会有几个尾随0
。它应该是
for (i=1; i<5; i++) {
if (min > num[i]) {
min = num[i];
}
}
答案 1 :(得分:1)
在这个表达式中:num[i+1]
你试图访问数组之外的元素 - 有效的数组索引从零到数组的长度减去1({{1}在这种情况下,4
不在数组中。
无论如何你不应该硬编码数组长度,而是像这样编写你的循环:
4+1
这样它总是起作用,它不会影响阵列的实际长度。