嵌套的for循环和break
C++ Nested for loop and break
我是计算机科学的新手,有一个快速的问题。我试着编写一个程序,它可以输入两个整数,然后输出它们之间的所有质数。
我遇到的问题是,当我在嵌套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.nn";
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值。
这应该教你如何编写具有单一职责的函数。你的函数循环遍历一串数字,对于每一个数字,它都会检查它是否是素数。后一部分属于一个单独的功能。有趣的是,如果您首先编写单独的函数,那么您的错误几乎不可能出现。
在下面的for循环中,i未初始化,您必须设置i=2
,并将上界设置为sqrt(num1)
。
for (i=2; i <= sqrt(num1); i++)
{
if ((num1 % i) == 0)
{
valid = false;
break;
}
}
要使用sqrt()
还包括以下头文件,如下所示,
#include<cmath.h>
相关文章:
- 如何循环打印顶点结构
- 如何在C++中从两个单独的for循环中添加两个数组
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 正在尝试了解输入验证循环
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 我的 break 语句没有中断 for 循环
- 在基于 lambda 的 foreach 循环中模拟 'continue;', 'break;“
- 而带有逗号运算符的循环与重复的代码与“break;”
- 为什么我们要尽量减少循环中break和continue的使用
- 在循环重复两次之前,break 语句不起作用
- 如何在while循环中使用带有break的openmp
- 错误:break语句不在循环中,而实际上它在循环中
- While loop在碰到break后再进行一个循环
- 不使用break退出do/while循环
- 嵌套的for循环和break
- 在C函数末尾的循环中,break和return是否有显著的性能差异?
- 编写解释器——为break语句确定循环目标
- "break"如何在C++的while循环中工作?
- c++中的While循环(使用break)
- 如何使用 break 语句停止内部和外部循环