我是计算机科学的新手,有一个简短的问题。我试图制作一个程序,它接受两个整数输入并打印出它们之间的所有素数。
我遇到的问题是,当我在嵌套的 for 循环中使用 break 时。找到质数后,它不会在外部 for 循环的下一次循环中命中嵌套 for 循环。因此,当搜索介于 8 和 15 之间的质数时,它会打印出“11 12 13 14 15”。起初它是正确的,但在找到一个素数后,它声明其余有界数也是素数。
#include <iostream>
using namespace std;
int main()
{
// Prime number finder:
cout << "Enter two numbers and I will find the prime numbers between them.\n\n";
int num1, num2, i = 2;
bool valid;
cout << "Enter the lower limit: ";
cin >> num1;
cout << endl << "Enter the higher limit: ";
cin >> num2;
if (num2 <= num1)
{
cout << "Enter a number that is larger than the lower limit./n";
}
if (num1 <= 1)
{
cout << "1 2 ";
num1 = 3;
}
else if (num1 == 2)
{
cout << "2 ";
num1 = 3;
}
for (num1; num1 <= num2; num1++)
{
valid = true;
for (i; i < num1; i++)
{
if ((num1 % i) == 0)
{
valid = false;
break;
}
}
if (valid == true)
cout << num1 << " ";
}
return 0;
}
最佳答案
问题是你没有重置 i 的值。将循环更改为:
for (int i = 2; i < num1; i++)
并删除您之前对 i
的定义,因为此时不需要它。
更好的是,将检查数字是否为质数的整个检查更改为返回 bool 值的单独函数。
这应该教会您编写具有单一职责的函数。您的函数循环遍历一堆数字,并为每个数字检查它是否为质数。后一部分属于一个单独的功能。有趣的是,如果您首先编写单独的函数,那么您的错误极不可能出现。
关于C++ 嵌套 for 循环和中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17183537/