2011-10-16 85 views
3

有一个简单的while循环,并试图使其向一个for循环翻译while循环成环

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

这里是我的循环

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

为什么它不给相同的输出?第一个会打印1248163264128,for循环打印137153163127

+2

增量'I * = 2'在'为(I = 1; I <= 128; I * = 2)' – cpx

+0

条件在for循环是错误..配售我* = 2代替我的++解决你的问题.. –

回答

8

因为你也在for循环中增加了i。在原来的while循环中,i从不增加。

试试这个:

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

不,一定要试试这个'for(i = 1; i <= 128; i * = 2)'!更糟的是,这个答案增强了这样一个想法:for循环只能增加一个循环变量,而OP似乎已经有了。 –

+0

@ChristianRau看起来你从我以前的日子里偶然发现了一篇文章。固定。 – Mysticial

13

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);  
} 
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);   
}