C ++嵌套for循环和中断

时间:2013-06-19 05:33:59

标签: c++ for-loop break

我是计算机科学的新手并且有一个简单的问题。我试图创建一个程序,它将采用两个整数输入并打印出它们之间的所有素数。

我遇到的问题是当我在嵌套for循环中使用break时。在找到素数后,它不会在下一个外部循环中点击嵌套的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;
}

2 个答案:

答案 0 :(得分:3)

问题是你没有重置i的值。将你的循环改为:

for (int i = 2; i < num1; i++)

并删除您之前对i的定义,因为此时不需要它。

更好的是,更改整个检查数字是否为一个返回bool的单独函数。

这应该教你单一职责编写职能。你的函数循环遍历一堆数字,并且每个数字都检查它是否是素数。后一部分属于单独的功能。有趣的是,如果您首先编写单独的函数,则不太可能出现您的错误。

答案 1 :(得分:1)

在下面的for循环中,我未初始化,您必须设置i=2,同时将上限设置为sqrt(num1)

for (i=2; i <= sqrt(num1); i++)
{
        if ((num1 % i) == 0)
    {
        valid = false;
        break;
    }
}

使用sqrt()还包括以下头文件,如下所示

#include<cmath.h>