C++ 嵌套 for 循环和中断

标签 c++ for-loop 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.\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/

相关文章:

python - 当不满足条件时中断 if __name__

c++ - 简单模型检查器工具

c++ - 我需要在 TeamCity 服务器或 Team Foundation Build Service 上为 C++ 项目/VS 2013 安装什么?

c++ - 如何在 C++ 中逐个元素地比较两个 vector 的相等性?

c - 在 for 循环的下一次迭代开始后,指针指向的数据在复制另一个列表末尾的列表时被破坏

在javascript中从内循环跳出外循环

c++ - Json 将 Vector<Class> 序列化为 json 数组 (nlohmann/json.hpp)

r - 如何按组计算日期之间的时间差

Python 二维数组求和枚举

python - 如何用击键杀死while循环?