虽然循环不会退出,即使它应该

时间:2019-02-05 03:25:37

标签: c++ c++11 while-loop

我已经写了一些代码,但是while循环没有退出?

#include <iostream>

#define TriangleNumber(x) (x * (x + 1)) / 2

int main(int argc, char* argv[])
{
    int idx       = 0;
    int n_factors = 0;
    int triangle_num = 0;
    while (n_factors < 3)
    {
        int n_factors    = 0;
        triangle_num = TriangleNumber(idx);
        for (int i = 1; i <= triangle_num; i++)
        {
            if (triangle_num % i == 0)
            {
                n_factors++;
            }
        }
        idx++;
    }
    std::cout << "Number with greater than 3 factors = " << triangle_num;
    return 0;
}

期望在idx = 3和三角形数字6处退出。

2 个答案:

答案 0 :(得分:3)

您两次声明了完全相同的变量名,因此n_factors++指的是内部循环中的一个。从内部循环中删除int,您的程序将输出

  

大于3个因子的数字= 6

工作代码:

#include <iostream>

#define TriangleNumber(x) (x * (x + 1)) / 2

int main(int argc, char* argv[])
{
    int idx       = 0;
    int n_factors = 0;
    int triangle_num = 0;
    while (n_factors < 3)
    {
        n_factors    = 0;
        triangle_num = TriangleNumber(idx);
        for (int i = 1; i <= triangle_num; i++)
        {
            if (triangle_num % i == 0)
            {
                n_factors++;
            }
        }
        idx++;
    }
    std::cout << "Number with greater than 3 factors = " << triangle_num;
    return 0;
}

答案 1 :(得分:1)

您将在while循环内外两次重定义n_factors。您要递增的一个是循环内的一个,而循环要检查的那个是局外人,在您的情况下始终为零,即始终小于3。