我应该输入数组 x[ ]
并创建新数组 y[ ]
,它从原始数组向右移动。
我对第一个元素有问题,y[0]
- 例如。如果我输入
{7, 8, 4, 2, 3}
- 下面的代码返回:
{-693726240, 7, 8, 4, 2}
哪里出错了?
提前致谢。
#include <iostream>
using namespace std;
int main()
{
int i, j, n, m=0, x[100],y[100];
cin >>n;
for(int i=0; i<n; i++)
{
cout << "enter "<< i+1 <<". element: ";
cin >> x[i];
if (i>0)
y[m++] = x[i-1];
else //THIS IS FOR Y[0] BUT DOESN'T WORK
y[m++] = x[n-1];
}
// ARRAY SHIFTED TO THE RIGHT:
for(int j=0; j<m; j++)
{
cout << y[j]<<" ";
}
return 0;
}
最佳答案
循环从 i == 0
开始。您在第 i 次迭代中读取了第 i 个元素。当您在第 0 次迭代中读取 x[n - 1]
时,i == n - 1
是 future 某个时间。 C++ 没有义务为您将变量初始化为任何特定值,因此当您从尚未初始化的位置读取时,您可能会收到垃圾(在本例中为 -693726240
)。
要解决这个问题,你必须解决时间悖论。不要在第 0 次迭代时分配任何东西;等到循环完成,所有数据都进来了,然后才偷偷溜回去填入第0个元素。
或者,首先读取整个 x
,然后当您知道所有值时,使用您当前的算法将 x
转换为 y
(即将当前的 do-everything 循环分成读取循环和移位循环)。这样,当您从 y
开始时,所有的 x
值都将是已知的,并且您不会遇到任何时间旅行事故。
关于c++ - 新的整数数组向右移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52889106/