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

While loop not exiting even though it should

本文关键字:退出 循环      更新时间:2023-10-16

我已经写了一些代码,但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 处退出。

您重新声明了两次完全相同的变量名称,因此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;
}

您正在重新定义n_factors两次,分别在while循环的外部和内部。您递增的那个是循环内部的那个,而循环检查的那个是外部变量,在您的情况下它始终为零,即始终小于 3。