【问题标题】:while loop is not breaking even if the condition is satisfied即使满足条件,while循环也不会中断
【发布时间】: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


【解决方案1】:

您在两个循环中使用相同的变量 (i),并且在内部循环中,退出条件是 i 为 0 或负数,但内部循环中此变量的唯一变化是 i=i/10,这通常会产生意外与 int 一起使用时的结果。

此外,i 在外循环中永远不会达到 500,因为它在内循环中减小了。我不确定你为什么要这样做,但请检查你是否必须在两个循环中使用相同的变量

【讨论】:

    猜你喜欢
    • 2022-10-13
    • 2016-03-14
    • 2013-04-08
    • 2021-08-07
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多