我不给时得到随机数。 > 55

时间:2019-11-21 07:26:20

标签: c arrays sorting pointers bubble-sort

  • C语言
  • 使用指针进行气泡排序
  • 我正在使用CodeBlocks IDE

我遇到一个问题,当我提供的输入大于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

1 个答案:

答案 0 :(得分:1)

在您的sort函数中,第一次运行通过内部循环(即,对于r == 0):

for (i = 0; i < 5 - r; i++) {

将在i = 0i = 4(包括)之间进行迭代。

在循环主体中,将索引i的值与索引i + 1的值进行比较:

  if ( * (p + i) > * (p + i + 1)) {

但是当i = 4时,表示i + 1 == 55在所提供的数组中不是有效索引(该数组仅包含5个值,因此索引4是最后一个)。

这意味着您调用undefined behavior

要解决此问题,只需执行:

for (i = 0; i < 4 - r; i++) {