Консультация № 71777
20.01.2007, 10:01
0.00 руб.
0 4 4
Здравствуйте эксперты!
Подскажите, почему получается бесконечный цикл если писать вот так:
for(int a=0;a=5;a++){cout<<"*";};
и вот так:
for(int a=0;a<5;a+2){cout<<"*";};

Обсуждение

Неизвестный
20.01.2007, 12:12
общий
это ответ
Здравствуйте, Вячеслав Шинкаренко!
В первом случае
for(int a=0;a=5;a++){cout<<"*";};
в условии цикла значение выражения a=(призвоить)5 всегда истино,
а значит цикл не закончится. Нуно так, например,
for(int a=0;a<=5;a++){cout<<"*";};
Во-втором случае
for(int a=0;a<5;a+2){cout<<"*";};
значение a ваще не меняется. Нуно так, например,
for(int a=0;a<5;a+=2){cout<<"*";};
Удачи!
Неизвестный
20.01.2007, 12:40
общий
это ответ
Здравствуйте, Вячеслав Шинкаренко!

бесконечный цикл в первом случае получается потому что вместо условия вторым параметром цикла стоит присваивание(а=5). "=" - это оператор присваивания, а "==" - оператор сравнения. Поэтому Вам необходимо писать а==5 в первом случае.
во втором случае третьим параметром цикла стоит арифметический оператор сложения, который не изменяет значения операндов(а+2), чтобы присвоить а новое значение необходимо использовать оператор присваивания "=". Т.е во втором случае вместо а+2 нужно писать а=а+2 либо а+=2
Неизвестный
20.01.2007, 16:04
общий
это ответ
Здравствуйте, Вячеслав Шинкаренко!
1) for(int a=0;a=5;a++){cout<<"*";}; // нужно условие (int a=0;a!=5;a++) так как цикл выполняется пока условие истинно (т.е. "а" неравно 5).

2) правильно будет: for(int a=0;a<5;a+=2){cout<<"*";}; // иначе результат увеличения "а" на 2 не сохранится.
Неизвестный
20.01.2007, 20:08
общий
это ответ
Здравствуйте, Вячеслав Шинкаренко!
Цикл в Си++ представляет собой следущее:
for (инициализация; условие; итерация)

здесь инициализация - это то, что выполняется первый раз
условие - буловское значение, пока оно равно true - цикл выполняется, поэтому цикл

while (условие)
{
}

эквивалентен

for (;условие;)
{
}

итерация - это то, что выполняется при каждом проходе цикла.

Теперь нужно отметить такой момент, что в с++ bool - это такое числовое значение, что если оно равно 0, то это false, при других значения это true

т.е.

цикл
while (true) - бесконечный

то и циклы
while (1)
while (5)
while (8)

тоже бесконечные

Еще один момент: в си оператор = возвращает результат присваивания. Т.е. (x = 5) имеет значение 5 . Поэтому можно записать так: y = (x = 5), ну или без скобок, y = x = 5

Вернемся к вашей задаче.
В первом случае в качестве условия всегда будет значение присваивания a = 5, т.е. 5,а пять в виде bool означает true, получаем всегда выполняющееся условие, т.е. бесконечный цикл

Во втором случае единственное, что делает выражение a+2, это создает некоторую ячейку в памяти со значением 2, при этом само a не изменяется и всегда остается меньше чем 5. Т.е. a < 5 выполняется всегда и цикл бесконечный.
Форма ответа