Перевести цикл while в цикл for

#c #for-loop #while-loop

#c #for-цикл #цикл while

Вопрос:

Создайте простой цикл while и попытайтесь превратить его в цикл for

 i=1
while(i<=128)
{     printf("%d",i);
   i*=2;
}
  

Вот мой цикл for

 for (i=1;i<=128;i  )
{ 
   printf("%d",i);
   i*=2;
}
  

Почему он не дает тот же результат? Первый будет печатать 1248163264128 , печать цикла for 137153163127 ?

Комментарии:

1. Увеличить i*=2 for (i=1;i<=128;i*=2)

2. условие в цикле for неверно.. Размещение i*= 2 вместо i решает вашу проблему..

Ответ №1:

for Цикл удваивается i , а затем увеличивает его. while Цикл только удваивает его.

Измените for цикл на этот:

 for (i=1;i<=128;i*=2) {
    printf("%d", i);
}
  

Ответ №2:

Потому что вы также увеличиваете i в цикле for. В вашем исходном цикле while i никогда не увеличивается.

Попробуйте это:

 for (i=1; i<=128; i*=2)  //  Remove i  , move the i*=2 here.
{
    printf("%d",i);
}
  

Комментарии:

1. Нет, обязательно попробуйте это for(i=1; i<=128; i*=2) ! Что еще хуже, этот ответ подтверждает идею о том, что цикл for может увеличивать только переменную цикла, которая, похоже, уже есть у OP.

2. @ChristianRau Похоже, вы наткнулись на сообщение из моих предыдущих дней. Исправлено.

Ответ №3:

 for (i=1;i<=128;i*=2)
{ 
  printf("%d",i);    
}
  

Ответ №4:

В while цикле, который вы не увеличивали i , но в вашем for цикле вы используете

 for (i=1;i<=128;i  )
{
printf("%d",i);
    i*=2;
}
  

Вы увеличиваете i на единицу и умножаете i на 2 на каждой итерации вашего цикла. Именно по этой причине вы получаете странный результат.

Попробуйте следующий код для получения того же результата, что и при генерации цикла.

 for (i = 1; i <= 128; i *= 2)
{
printf("%d",i);        
}