Как добавить элементы в два массива, но в обратном порядке?

Цель этого кода — добавить элементы в два массива, но в обратном порядке. Я не понимаю, что я сделал не так, чтобы не компилировать(Синтаксис, цикл или ошибка массива ??). Не могли бы вы указать мне правильное направление? Спасибо!!

#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

Решение

Ваша логика не верна. Вы начинаете с индекса 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Это правильно, вы все равно ничего не увидите.

0

Другие решения

В вашей программе есть две ошибки:

  1. Все тело цикла состоит только из точек с запятой после цикла for вместо кода, который вы на самом деле хотите запустить внутри циклов. Это также объясняет, почему ваш код не компилируется: ваше умножение не является частью тела цикла и в результате Array1Index а также Array2Index — которые определены в заголовках цикла — больше не существуют.
  2. Хотя вы уменьшаете индексы arry, вы все равно начинаете с 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

По вопросам рекламы [email protected]