我遇到一个问题,当我提供的输入大于55时,它给我输出的是一些随机数,但仅适用于最大数(大于55)。
#include<stdio.h>
#include<conio.h>
void input(int * p) {
int i;
printf("Enter 5 numbers");
for (i = 0; i < 5; i++)
scanf("%d", p + i);
}
void display(int * p) {
int i;
for (i = 0; i < 5; i++)
printf("\n%d", *(p + i));
}
void sort(int * p) {
int r, t, i;
for (r = 0; r < 5; r++) {
for (i = 0; i < 5 - r; i++) {
if ( * (p + i) > * (p + i + 1)) {
t = * (p + i);
*(p + i) = * (p + i + 1);
*(p + i + 1) = t;
}
}
}
}
void main() {
int a[5];
input(a);
display(a);
sort(a);
display(a);
getch();
}
输入上述代码:
Enter 5 numbers 2
43
65
12
5
输出:
2
43
65
12
5
2
5
12
28
43
答案 0 :(得分:1)
在您的sort
函数中,第一次运行通过内部循环(即,对于r == 0
):
for (i = 0; i < 5 - r; i++) {
将在i = 0
和i = 4
(包括)之间进行迭代。
在循环主体中,将索引i
的值与索引i + 1
的值进行比较:
if ( * (p + i) > * (p + i + 1)) {
但是当i = 4
时,表示i + 1 == 5
。 5
在所提供的数组中不是有效索引(该数组仅包含5个值,因此索引4
是最后一个)。
这意味着您调用undefined behavior。
要解决此问题,只需执行:
for (i = 0; i < 4 - r; i++) {