虽然循环在中间停止并且不返回任何东西?

While loop stop in the middle and not return anything?

提问人:megamega 提问时间:5/8/2023 最后编辑:Filburtmegamega 更新时间:5/8/2023 访问量:79

问:

这是我的 C# 程序,用于打印一系列质数,最多 N 个数,具体取决于输入。

例如:如果输入 100,它将打印 100 个质数 例如:如果输入 3,它将打印 2、3、5

当我输入 2 时,程序工作正常,它会打印 2 和 3,但是当我输入 3 时,它只是冻结并且在打印 3 后不做任何事情,没有返回日志或错误日志,之后的每一行代码也不起作用。

            int n;
            Console.WriteLine("input: ");
            n = Convert.ToInt32(Console.ReadLine());

            int isPrimeFlag = 1;
            int count = 1;
            int number = 2;
            while (count <= n)
            {
                for (int i = 2; i < number; i++)
                {
                    if (number % i == 0)
                    {
                        isPrimeFlag = 0;
                    }
                }

                if (isPrimeFlag == 1)
                {
                    Console.WriteLine("number: " +number);
                    Console.WriteLine("count: " +count);
                    count++;
                }

                number++;
            }

            Console.WriteLine("n: " +n);
            Console.WriteLine("count: " +count);

只要输入小于 3,程序就正常运行。

C# while 循环

评论

3赞 Filburt 5/8/2023
如何调试小程序
0赞 Filburt 5/8/2023
只有在找到素数时才递增 - 请了解如何使用调试器单步执行代码。count
0赞 juharr 5/8/2023
您可以尝试的另一种解决方案是跟踪到目前为止找到的所有素数,然后您只需要根据它们检查模数,而不是从 2 递增。
0赞 Neil Meyer 5/8/2023
IsPrimeFlag 正在决定真值,它应该是一个布尔值。

答:

0赞 Liquid Core 5/8/2023 #1

isPrimeFlag 变量在 while 循环中每次迭代开始时未重置为 1。因此,一旦 isPrimeFlag 设置为 0,它就会保持 0,导致循环无限期运行而不增加 count 变量。

若要解决此问题,请尝试在 while 循环中每次迭代开始时将 isPrimeFlag 变量重置为 1

试试这个家伙

int n;
Console.WriteLine("input: ");
n = Convert.ToInt32(Console.ReadLine());

int isPrimeFlag;
int count = 1;
int number = 2;
while (count <= n)
{
    isPrimeFlag = 1; // Reset the flag at the beginning of each iteration
    for (int i = 2; i < number; i++)
    {
        if (number % i == 0)
        {
            isPrimeFlag = 0;
            break; // You can break the loop early if a factor is found
        }
    }

    if (isPrimeFlag == 1)
    {
        Console.WriteLine("number: " + number);
        Console.WriteLine("count: " + count);
        count++;
    }

    number++;
}

Console.WriteLine("n: " + n);
Console.WriteLine("count: " + count);