Помогите понять while в Си
int a = 0;
while(a <= 5){
printf("q\n");
a--;
}
или
int a = 0;
while(a <= 5){
printf("q\n");
a = a - 1;
}
Выводит бесконечный цикл, почему? Как я понимаю должно быть пока 5 больше или равно 0 и 5 раз вывести букву "q" но цикл становится бесконечный.
Ответы (4 шт):
У вас цикл выполняется пока a <= 5. Изначально a = 0. В течение всего цикла a уменьшается на 1 и становится -1, -2 и т.д. Условие никогда не выполнится, цикл не прервётся. Нужно увеличивать a на 1, а не уменьшать, чтобы он выполнился 5 раз
Развернем... просто пишу выполняемые строки, это не код.
int a = 0;
while(a <= 5) // a == 0, OK, работаем
printf("q\n"); // Выводим a
a--; // Уменьшаем а на 1, до -1
while(a <= 5) // a == -1, OK, работаем
printf("q\n"); // Выводим a
a--; // Уменьшаем а на 1, до -2
while(a <= 5) // a == -2, OK, работаем
printf("q\n"); // Выводим a
a--; // Уменьшаем а на 1, до -3
while(a <= 5) // a == -3, OK, работаем
printf("q\n"); // Выводим a
a--; // Уменьшаем а на 1, до -4
......
Так понятнее?
Когда дойдете до INT_MIN - минимального представимого числа, произойдет переполнение и, хотя это UB, на самом деле a станет очень большим :) и цикл завершится...
int a = 0;
while(a <= 5){
printf("q\n");
a++;
}
Дословно: Пока а меньше либо равно 5 - выводи q и увеличивай значение a на 1.
В вашем коде a уменьшалось => a никогда не будет больше 5(будет после переполнения переменной), поэтому цикл и был вечным: условие выхода не выполнялось
while(a <= 5)
В цикле "Пока" Вы уменьшаете переменную a, таким образом она будет уменьшаться до минимального значения типа int (минимальное значение -2 147 483 648). Нужно же наоборот увеличивать переменную a. Вот так a++