我正在生成一个随机整数数组并尝试将值向右移动一个并将第一个元素替换为前一个元素。
输出是无序的,最后的元素是一个随机生成的整数。
#include <iostream>
#include <cstdlib>
#include <iomanip>
using namespace std;
void shift(int values[], int size) {
int temp;
for (int i = 0; i < size; i++) {
temp = values[size - 1];
values[i] = values[i + 1];
values[0] = temp;
cout << values[i] << setw(4);
}
cout << endl;
}
int main()
{
cout << "Random 10 index array" << endl;
const int CAP = 10;
int numbers[CAP];
srand(time(0));
int i;
for (i = 0; i < CAP; i++) {
int rng = rand() % 100 + 1;
numbers[i] = rng;
cout << numbers[i] << setw(4);
}
cout << "shifting all elements to the right: " << endl;
shift(numbers, CAP);
cout << endl;
system("pause");
return 0;
}
我尝试使用 i < size - 1
,但我需要的 10 个数字中有 9 个。
原文由 Ozymandias 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是有问题的代码:
该语句不使用循环变量。为什么它坐在循环中?此分配将继续发生
size-1
次。您的循环不变量是
i <size
,但您尝试访问i+1
。那只是自找麻烦:)。这就是为什么您在使用i < size-1
时不会得到垃圾值的原因。同样,这不使用循环变量。它不属于循环。您只需一遍又一遍地设置
values[0]
。这是一个有效的解决方案,使用两个临时变量: