【问题标题】:Translate a while loop into for loop将while循环翻译成for循环
【发布时间】:2011-12-08 13:52:02
【问题描述】:

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

【问题讨论】:

  • for (i=1;i&lt;=128;i*=2)中增加i*=2
  • for 循环中的条件错误。将 i*=2 替换为 i++ 可以解决您的问题。

标签: c for-loop while-loop


【解决方案1】:

因为您还在 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&lt;=128; i*=2)!更糟糕的是,这个答案强化了 for 循环只能增加循环变量的想法,而 OP 似乎已经有了。
  • @ChristianRau 看起来你偶然发现了我早期的一个帖子。固定。
【解决方案2】:

for 循环将i 加倍,然后将其递增。 while 循环只会将其翻倍。

for 循环更改为:

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

【讨论】:

    【解决方案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。这就是你得到奇怪结果的原因。

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

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

      【讨论】:

        猜你喜欢
        • 2018-03-05
        • 1970-01-01
        • 2022-06-14
        • 1970-01-01
        • 2021-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-19
        相关资源
        最近更新 更多