2015-06-21 69 views
0

我已經創建了一個程序來打印阿姆斯特朗數,但內部while循環沒有中斷,當值爲0時它應該中斷,但是它會進入連續循環。即使條件滿足,循環也不會中斷

有誰能告訴我我的程序有什麼問題。 這是編譯器的正確行爲。

#include<stdio.h> 
int main() 
{ 
     int i=1,n,a=0; 
     while(i<=500) 
     { 
       printf("1st i = %d\n",i); 
       while(i > 0) //This loop is not breaking. 
       { 
         printf("2nd i = %d\n",i); 
         n = i%10; 
         printf("n = %d\n",n); 
         a = n*n*n + a; 
         i = i/10; 
         printf ("3rd i = %d\n",i); 
         printf ("a = %d\n",a); 
         if (i==0) 
           break; 
       } 
       if (a==i) 
         printf("Number is Armstrong"); 
       i++; 
     } 
     return 0; 
} 

請嘗試運行該程序,它似乎是正確的,但它不工作。

+3

看起來'i'在內部while循環內減少 並且在外部while循環中增加。它會在1和0之間以及1和0之間上下跳動......事實上,內部循環總是「休息」。實際上,假如它是,'if(i == 0)break'是無用的,因爲它想要從 – Pynchia

+1

中跳出來的條件爲外部循環制作一個單獨的變量而不是'i'。 – usr2564301

+0

不要忘記在內部循環之前重置'a'。 –

回答

3

對兩個循環都使用相同的變量(i),而在內部循環中退出的條件爲i爲0或負數,但內部循環中此變量的唯一更改爲i=i/10,通常會產生意外的結果使用int時。

此外,我永遠不會在外循環中達到500,因爲它在內循環中減少。我不確定你爲什麼要這樣做,但檢查是否必須在兩個循環中使用相同的變量

+0

謝謝,我明白了。 –

相關問題