【发布时间】:2015-06-21 20:49:03
【问题描述】:
我创建了一个打印armstrong数字的程序,但是内部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;
}
请尝试运行该程序,它似乎是正确的,但它不工作。
【问题讨论】:
-
似乎
i在内部 while 循环中减少,在外部 while 循环中增加。它会一直在 1 和 0 以及 1 和 0 之间上下跳动……事实上,内部循环总是breaks。事实上,if (i==0) break是没用的,考虑到它想要突破的时候的条件 -
为外部循环创建一个单独的变量而不是
i。 -
并且不要忘记在内部循环之前重置
a。 -
内部循环的显式
break有什么神秘的原因吗? -
感谢大家的帮助。
标签: c loops while-loop iteration