Два последовательных цикла в C ++, второй цикл не работает - PullRequest
1 голос
/ 11 октября 2019

Цель: у меня есть два массива. 1-й массив - это: evenList, а 2-й -: oddList. Я хочу напечатать четные и нечетные числа между заданными диапазонами в этом формате.

Screenshot; Print Even and Odd Numbers

Это мой код,

cout << "\nEven numbers between " << lowerLimit << " to " << upperLimit << ": ";

for(int i; i < evenList.size(); i++){
    cout << evenList[i] << "  ";
}

cout << "\n\nOdd numbers between " << lowerLimit << " to " << upperLimit << ": ";

for(int j; j < oddList.size(); j++){
    cout << oddList[j] << "  ";
}

первый цикл for печатает желаемый вывод, но второй цикл не показывает нечетные числа. Вот вывод:

Screenshot; Undesired Output

Я уже читал некоторые сведения о циклах for, но я просто не могу получить ответ. Если кто-то столкнулся с тем же вопросом или проблемой и получил ответ, пожалуйста, поделитесь. Я действительно ценю это.

Ответы [ 4 ]

3 голосов
/ 11 октября 2019

Вы не инициализируете свои итераторы. int i; должно быть int i = 0;, а также для int j. Как и сейчас, это неопределенное поведение. Это просто шанс, что это сработало в первый раз, а не во второй раз, с тем же успехом оно могло бы работать оба раза, вообще не работать, сразу разбиться или сделать что-то совершенно другое.


компилятор выдает предупреждение для этого кода? В идеале это должно быть что-то вроде «неинициализированная локальная переменная i» used ». Всегда слушайте предупреждения компилятора, они могут помочь указать на некоторые распространенные ошибки. Если ваш компилятор не выдает здесь никаких предупреждений, попробуйте посмотреть, можете ли вы настроить его на более строгие с предупреждениями.

0 голосов
/ 11 октября 2019

Вы также можете использовать диапазон для цикла

cout<<"\nEven numbers between " << lowerLimit << " to " << upperLimit << ": ";
for (const auto &e: evenList)
{
    cout << e << "  ";
}

cout << "\n\nOdd numbers between " << lowerLimit << " to " << upperLimit << ": ";

for (const auto &o: oddList)
{
    cout << o << "  ";
}
0 голосов
/ 11 октября 2019

Попробуйте использовать FOR EACH LOOP для предотвращения путаницы при инициализации переменной.

for(string s : eventList){ cout << s << endl; }

и то же самое для второго цикла. Надеюсь, на этот раз это работает

0 голосов
/ 11 октября 2019

У меня есть две точки, которые ведут вас к нежелательному выводу.

  1. Всегда полезно инициализировать переменную. В большинстве случаев это может привести к ошибке сегментации. В приведенном выше коде вы не инициализировали переменные в цикле for.
  2. Я не использовал C ++, но полагаю, что вы используете массив, evenList и oddList. И вы используете условие j<oddList.size(). Единственное, как это условие может пойти не так, это если в массиве oddList нет элементов. Проверьте, есть ли у вас какие-либо элементы в этом массиве.
...