提问人:megamega 提问时间:5/8/2023 最后编辑:Filburtmegamega 更新时间:5/8/2023 访问量:79
虽然循环在中间停止并且不返回任何东西?
While loop stop in the middle and not return anything?
问:
这是我的 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,程序就正常运行。
答:
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);
评论
count