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

时间:2015-12-02 20:52:17

标签: c++

我正在尝试从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];

1 个答案:

答案 0 :(得分:2)

你阵列的大小是多少? 假设大小为21(索引从0到20)。

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

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

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

  1. 当你想要反过来时,你正在向后遍历阵列。
  2. 循环从索引超出范围(21)开始。
  3. 循环可能会打印一些未定义的值(您应该记住最后添加的值的索引)。
  4. 我建议您使用其他数据结构,例如Stack,但如果您想使用数组,可以按如下方式编辑代码:

    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循环,并检查退出条件。