将while循环转换为for循环

3

有一个简单的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


2
for (i=1;i<=128;i*=2) 中将 i*=2 递增 - cpx
循环中的条件错误。将i++替换为i*=2可以解决您的问题。 - Raghu Srikanth Reddy
4个回答

13

for循环先将i加倍,然后再将其递增。而while循环只是将其加倍。

for循环修改为以下代码:

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

8
因为你在for循环中也对i进行了递增。在你原来的while循环中,i从未递增。
试试这个:
for (i=1; i<=128; i*=2)  //  Remove i++, move the i*=2 here.
{
    printf("%d",i);
}

不,尽管尝试这个 for(i=1; i<=128; i*=2)!更糟糕的是,这个答案加强了一个错误的想法,即 for 循环只能递增循环变量,而这似乎已经是提问者所知道的。 - Christian Rau
@ChristianRau 看起来你发现了我早期的一篇帖子。已修复。 - Mysticial

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

1
while 循环中,您没有增加 i 的值,但是在您的 for 循环中却使用了它。
for (i=1;i<=128;i++)
{
printf("%d",i);
    i*=2;
}

在循环的每次迭代中,您正在将i增加1并将i乘以2。这就是您得到奇怪结果的原因。

尝试使用以下代码以获得与while循环生成相同的结果。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接