Я новичок в С++, и я считаю, что ответ на мою проблему очень и очень прост.
Я использовал Eclipse IDE, но недавно перешел на простой текстовый редактор и использовал командную строку для компиляции. (Поскольку в настоящее время у меня нет собственного компьютера, и мне не разрешено ничего устанавливать на тот, который я использую).
Однако при написании программы я заметил, что всякий раз, когда у меня были вложенные циклы, запускался только внутренний цикл.
Я пытался скомпилировать свой код с помощью разных онлайн-компиляторов, что приводит к той же проблеме.
Из-за этого я считаю, что проблема связана с чем-то простым, о чем Eclipse позаботился автоматически.
#include <iostream>
int main() {
for (int i; i<3; i++) {
for (int j; j<3; j++) {
std::cout << j << std::endl;
}
}
return 0;
}
Выше приведен самый простой пример, который я мог придумать, который создает проблему. Ожидаемый результат: 0, 1, 2, 0, 1, 2, 0, 1, 2, однако он выводит только 0, 1, 2, когда я компилирую и запускаю его.
Вы не инициализируете переменные i
и j
значением 0
, поэтому переменные начинаются с неопределенных значений. Исправить:
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
std::cout << j << std::endl;
}
}
Это настолько очевидно, что я не могу поверить, что пропустил это. Думаю, я слишком зацикливался на изменениях IDE :) Спасибо!
Хуже, чем неопределенные значения, это UB для чтения неинициализированных переменных.
Проблема в том, что вы используете неинициализированные переменные, которые оставляют их с неопределенными значениями.
for (int i; i < 3; i++) {
^
Попробуйте с
for (int i = 0; i < 3; i++) {
Это настолько очевидно, что я не могу поверить, что пропустил это. Думаю, я слишком зацикливался на изменениях IDE :) Спасибо!
@dandan Я удивлен, что вы не получили предупреждения от тестируемых вами компиляторов.
Хуже, чем неопределенные значения, это UB для чтения неинициализированных переменных.
Прежде всего, используйте
for(int i = 0;..
, у вас нет гарантии, что там вообще будет нулевое значение. То же самое с Дж.