gpt4 book ai didi

c - 当我给出“否”时,我会得到随机数。 > 55

转载 作者:行者123 更新时间:2023-11-30 21:36:11 24 4
gpt4 key购买 nike

  • 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

最佳答案

在您的 sort 函数中,第一次运行内部循环(即 for 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++) {

关于c - 当我给出“否”时,我会得到随机数。 > 55,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58969408/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com