首页 > 解决方案 > 给出不时我得到随机数。> 55

问题描述

我遇到一个问题,当我输入超过 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

标签: carrayssortingpointersbubble-sort

解决方案


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

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

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

在循环体中,检查 index 处i的值与 index 处的值i + 1

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

但是什么时候i = 4,那就意味着i + 1 == 55不是提供的数组中的有效索引(仅包含 5 个值,因此索引4是最后一个)。

这意味着您调用未定义的行为

要修复它,只需执行以下操作:

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

推荐阅读