【发布时间】:2022-06-15 18:16:17
【问题描述】:
这是我在这里的第一篇文章。我是这种事情的新手。
我正在尝试学习冒泡法。一切正常,除了第一个数字总是显示一个完整的随机负数。例如,我刚刚运行程序,它说:-858993460, 2, 2, 3, 5, 而不是2, 2, 3, 5, 8 ,这应该是它应该说的。
它使用 srand 填充数组,这样我就可以连续测试它而无需输入任何内容。
这是代码,我的主要语言是西班牙语,所以如果有人来自讲西班牙语的国家/地区看到此内容,请随时用西班牙语回答:)
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <time.h>
using namespace std;
void randomArray(int[], int);
void mostrarArray(int[], int);
int main()
{
int i = 0, j = 0, array[5], cantElementos = 5, aux = 0;
srand(time(NULL));
randomArray(array, cantElementos);
mostrarArray(array, cantElementos);
for (i = 0; i < cantElementos; i++) {
for (j = 0; j < cantElementos; j++) {
if (array[j] > array[j + 1]) {
aux = array[j];
array[j] = array[j + 1];
array[j + 1] = aux;
}
}
}
printf("\nEl array arreglado es:\n");
mostrarArray(array, cantElementos);
return 0;
}
void randomArray(int array[], int cantElementos) {
int i = 0;
for (i = 0; i < cantElementos; i++) {
array[i] = rand() % 10 + 1;
}
}
void mostrarArray(int array[], int cantElementos) {
int i = 0;
for (i = 0; i < cantElementos; i++) {
printf("%d, ", array[i]);
}
printf("\n\n");
}
【问题讨论】:
-
array[j + 1]由于您的内部循环的范围,是一个越界访问。 -
您可以使用
for (j = 0; j < cantElementos - 1; j++)... 或者,使用for (j = 1; j < cantElementos; j++)并使用j-1和j作为if -
@paddy 哇,真快!我不明白,我应该如何编写代码?我在尝试自己修复后观看了有关如何解决练习的视频,他写了那些确切的东西。我复制粘贴了它,问题仍然存在:(
-
@ChrisMM 谢谢!!解决了它,现在我看到了我应该写的东西,我明白了这个错误。再次感谢,你们回答的速度给我留下了深刻的印象!