2015-06-21 74 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

谢谢,我明白了。 –

相关问题