C++ 如何在两个数组中按相反顺序添加元素?

C++ 如何在两个数组中按相反顺序添加元素?,c++,arrays,nested-loops,decrement,C++,Arrays,Nested Loops,Decrement,这段代码的目的是在两个数组中添加元素,但顺序相反。我不明白我做错了什么,因为我没有编译语法、循环或数组错误??。你能给我指一下正确的方向吗?谢谢 #include "stdafx.h" #include <iostream> using namespace std; int main() { const int ARRAY1_LEN = 3; const int ARRAY2_LEN = 2; int MyInts1[ARRAY1_LEN] = { 35

这段代码的目的是在两个数组中添加元素,但顺序相反。我不明白我做错了什么,因为我没有编译语法、循环或数组错误??。你能给我指一下正确的方向吗?谢谢

#include "stdafx.h"
#include <iostream>

using namespace std;

int main()
{
    const int ARRAY1_LEN = 3;
    const int ARRAY2_LEN = 2;

    int MyInts1[ARRAY1_LEN] = { 35, -3, 0};
    int MyInts2[ARRAY2_LEN] = {20, -1};

    cout << "Multiplying each int in MyInt1 by each in MyInts2 ... But Backwards:" << endl;

    for(int Array1Index = 0; Array1Index < ARRAY1_LEN - 1; Array1Index--);
        for(int Array2Index = 0; Array2Index < ARRAY2_LEN -1; Array2Index--);
        cout << MyInts1[Array1Index] << " x " << MyInts2[ Array2Index ] << " = " << MyInts1[Array1Index] * MyInts2[Array2Index] << endl;

        return 0;
}

你的逻辑不正确。您从索引0开始,然后返回。这意味着,你正在进入负范围-1,-2,-3。。。每个负数满足循环条件

它应该是:

int main()
{
    const int ARRAY1_LEN = 3;
    const int ARRAY2_LEN = 2;

    int MyInts1[ARRAY1_LEN] = { 35, -3, 0 };
    int MyInts2[ARRAY2_LEN] = { 20, -1 };

    cout << "Multiplying each int in MyInt1 by each in MyInts2 ... But Backwards:" << endl;

    int start_1 = ARRAY1_LEN > 0 ? ARRAY1_LEN - 1 : 0;
    int start_2 = ARRAY2_LEN > 0 ? ARRAY2_LEN - 1 : 0;

    for(int Array1Index = start_1; Array1Index >= 0; Array1Index--)
    {
        for(int Array2Index = start_2; Array2Index >= 0; Array2Index--)
        {
            cout << MyInts1[Array1Index] << " x " << MyInts2[ Array2Index ] << " = " << MyInts1[Array1Index] * MyInts2[Array2Index] << endl;
        }
    }

    return 0;
}
如果至少有一个数组为空,此代码也将正常工作


哦,还有一件事:你的代码也完全错了,因为你有分号;for之后,这意味着每个循环都有一个空体。因此,即使您的FOR是正确的,您也不会看到任何东西。

您的程序中有两个错误:

整个循环体只包含for循环后面的分号,而不是实际要在循环中运行的代码。这也解释了代码无法编译的原因:乘法运算不是循环体的一部分,因此在循环头中定义的Array1Index和Array2Index不再存在。 虽然正在减少阵列索引,但仍然从0开始,因此将访问负数组索引。 因此,您的代码实际上应该如下所示:

for (int Array1Index = ARRAY1_LEN - 1 ; Array1Index >= 0; Array1Index--){
    for (int Array2Index = ARRAY2_LEN - 1; Array2Index >=0; Array2Index--){
        cout << MyInts1[Array1Index] << " x " << MyInts2[Array2Index] << " = " << MyInts1[Array1Index] * MyInts2[Array2Index] << endl;
    }
}

你从索引0开始,一直向后走。看起来你认为把a++改成a-是你所要做的一切。在for体中什么都不做…你的代码不应该编译-请发布你的实际代码code@JosephMansfield那么我需要设置什么样的Array1Index和Array2Index呢?@MikeMB这是它没有编译的东西,我不明白为什么。@MateuzGrzejek谢谢!这个答案有几个问题。首先,您正在从ARRAY1_LEN计算start_2。其次,由于数组的长度必须始终大于0,因此无需计算start_1和start_2。第三,for循环条件应为>=,否则将不使用第一个元素。@JosephMansfield是的,我注意到了,谢谢。复制粘贴在代码方面可能很棘手:已经修复。此外,计算start_1和start_2是有用的,并且比将类似于ARRAY1_LEN-1的东西放在内存中更好。它对于调试过程也很方便,没有理由引入额外的逻辑。如果实际上,无论出于何种原因,如果ARRAY1_LEN为零或更小,那么只要程序编译,int start_1=ARRAY1_LEN>0,编译器就会产生错误?阵列1_LEN-1:0;将始终计算为int start_1=ARRAY1_LEN-1。即使编译器不会产生错误,零或负数组长度也会导致循环体永远不会执行。因此,如果您真的认为必须为最后一个有效索引引入别名,那么您可能至少应该忽略三元语句。代码中有一个错误:您正在访问MyInts1[ARRAY1_LEN],这是一个错误。这种元素不存在。