数组在C++中不会向后填充

Array will not fill backwards in C++

本文关键字:填充 C++ 数组      更新时间:2023-10-16

我试图将数组从20向后填充到0,但无论何时打印出来,它仍然向前打印。例如,我想输入1,2,3,4,5,然后得到5,4,3,2,1。

我曾尝试过做一个从20向后计数到0的for循环,但当我打印它时,它仍然不正确。有什么帮助吗?

int temp;
for (int i = 20; i > 0; i--)
{
    cout << "Please enter the next number. Use a -1 to indicate you are done: ";
    cin >> temp;
    while(temp > 9 || temp < -2)
    {
        cout << "You may only put numbers in 0 - 9 or -1 to exit. Please enter another number: ";
        cin >> temp;
    }
    arr1[i] = temp;
    cout << arr1[i];
}
for (int i = 21; i > 0; i--)
{
    cout << arr1[i];

您的数组大小是多少?假设大小为21(索引从0到20)

首先请注意,您的第一个循环永远不会填充索引0处的数组(像这样的arr1[0] = temp永远不会在第一个循环中执行)
如果你想避免这种行为,你应该这样写你的第一个for循环:

for (int i = 20; i >= 0; i--){。。。}

第二个for循环有一些问题:

  1. 您正在向后遍历数组,而您希望执行相反的操作
  2. 循环从超出界限(21)的索引开始
  3. 循环可能会打印一些未定义的值(您应该记住上次添加值的索引)

我建议你使用其他数据结构,如堆栈,但如果你想使用数组,你可以编辑你的代码如下:

int i;
for (i = 20; i >= 0; i--){...}
for (i; i <= 20; ++i) { cout << arr1[i]; }

如果你不想在循环外声明int i;,你可以这样做:

int lastAdded;
for (int i = 20; i >= 0; i--){
    ...
    lastAdded = i;
}
for (int i = lastAdded; i <= 20; i++) { cout << arr1[i]; }

编辑:请注意,在插入-1后,您的代码和我的代码都不会停止请求新值。
如果你想实现这种行为,你应该使用while循环而不是第一个for循环,并检查退出条件。