Короткий ответ: Я подозреваю, что вы намеренным время цикла для работы на копии из debut
, а не сам debut
.
- Давайте предположим, что
debut == 3
и fin == 5
.
- Выполняем первую итерацию цикла for, которая включает в себя полное прохождение цикла while.
- После цикла while у нас есть
debut == 0
, fin == 5
и i == 12
.
- Затем мы печатаем некоторую информацию.
- Однако теперь мы снова ищем в цикле for.
debut
был уменьшен до 0
, из-за работы, которую мы сделали, и поэтому каждый раз, когда мы запускаем этот код, в конце итерации цикла for, у нас будет debut == 0
, что приведет к тому, что цикл for никогда не выйдет ,
Это может быть более полезным, чтобы показать это инлайн с кодом ...
for (;debut<=fin;debut++){
// Let's assume we get here. We can assume some sane debut and fin values,
// such as the 3 and 5 suggested above.
int i=0;
while (debut != 0) {
// Stuff happens that makes debut go to zero.
}
// To get to this point, we __know__ that debut == 0.
// We know this because that's the condition in the while loop.
// Therefore, when we do the comparison in the for loop above for the
// next iteration, it will succeed over and over again, because debut
// has been changed to zero.
printf("%d->%d\n",debut,i);
}
Лично я подозреваю, что вы ищете число итераций для набора чисел. Это для меня звучит как идеальное место для использования функции. Код, который я бы предложил, будет выглядеть примерно так.
#include <stdio.h>
int iterations(int debut) {
int i = 0;
while(debut!=0)
{
if(debut%3==0)
{
debut+=4;
}
else if (debut%3!=0 && debut%4==0){
debut/=2;
}
else if (debut%3!=0 && debut%4!=0)
{
debut-=1;
}
i+=1;
}
return i;
}
int main() {
int debut = 3;
int fin = 5;
for (;debut<=fin;debut++) {
printf("%d -> %d\n", debut, iterations(debut));
}
}
Кроме того, только ради отметить то, пожалуйста, обратите внимание, что в примере кода, который я дал в конце концов, я удалил все входные Scanf кода. Это не связано с вашей реальной проблемой, и это уменьшает общий объем кода, который каждый должен сканировать, чтобы понять, где ваша проблема.
Если проблема устранена, вы должны отметить один из ответов, как принято. – nhgrif