Цель этого кода — добавить элементы в два массива, но в обратном порядке. Я не понимаю, что я сделал не так, чтобы не компилировать(Синтаксис, цикл или ошибка массива ??). Не могли бы вы указать мне правильное направление? Спасибо!!
#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
Это правильно, вы все равно ничего не увидите.
В вашей программе есть две ошибки:
Array1Index
а также Array2Index
— которые определены в заголовках цикла — больше не существуют.Таким образом, ваш код должен выглядеть так:
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;
}
}