c - 给出不时我得到随机数。> 55
问题描述
- 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 = 0
将在和i = 4
(包括)之间迭代。
在循环体中,检查 index 处i
的值与 index 处的值i + 1
:
if ( * (p + i) > * (p + i + 1)) {
但是什么时候i = 4
,那就意味着i + 1 == 5
。5
不是提供的数组中的有效索引(仅包含 5 个值,因此索引4
是最后一个)。
这意味着您调用未定义的行为。
要修复它,只需执行以下操作:
for (i = 0; i < 4 - r; i++) {
推荐阅读
- sql - 根据 SQL Server 中的案例语句对数据进行分组?
- typo3 - 使用自定义 be-module 中的链接向导的typo3
- c - C 预处理器:不允许 #include 指令的参数以数字开头的原因是什么?
- javascript - 为什么会这样?我在控制台输出中得到了正确的显示,在 UI 中得到了正确的行数,但我没有得到任何输出
- oracle - 无法将 NULL 插入表中
- javascript - 打字稿扩展类没有按预期工作
- python - 有没有办法镜像 python 函数?
- javascript - Nuxtjs:如何在另一个组件中调用组件?
- javascript - Google Apps 脚本 - 您能否从单元格或预定义的文本字符串中获取 IF 语句的条件?
- javascript - 是否可以通过 JS 注释掉特定的脚本?