我的程序接受用户输入int n,并打印出第一个n质数。这按预期工作

例如。如果用户输入8为n。该程序将打印:

2 3 5 7 11 13 17 19

我的问题是添加函数isPrime(n)(不允许更改)

这是我尝试过的,但我只是得到输出:
2 3 5 7 11 13 17 19  0 is not a prime number,

什么时候应该读2 3 5 7 11 13 17 19 8不是素数
#include "prime.h"
#include <iostream>

int main()
{


    int n;

    std::cout << "Enter a natural number: ";
    std::cin >> n;
        for (int i = 2; n > 0; ++i)
        {
            bool  Prime = true;
            for (int j = 2; j < i; ++j)
            {
                if (i  % j == 0)
                {
                    Prime = false;
                    break;
                }
            }
            if (Prime)
            {
                --n;
                std::cout << i << " ";

            }



        }

        if (isPrime(n))
        {
            std::cout << n << " is a prime number." << std::endl;
        }
        else
        {
            std::cout << n << " is not a prime number." << std::endl;
        }

        system("pause");

    }

prime.h:
#ifndef PRIME_H_RBH300111
#define PRIME_H_RBH300111

bool isPrime(int);

#endif
#pragma once
isPrime(int)的定义

prime.cpp:
#include <cmath>

#include "prime.h"

bool isPrime(int n)
{
    if (n < 2)
    {
        return false;
    }
    else if (n == 2)
    {
        return true;
    }
    else if ((n % 2) == 0)
    {
        return false;
    }

}

我无法更改.hprime.cpp文件
我只需要isPrime(n)函数来处理main()函数代码
用户输入n似乎没有采用8的数字。但改为0给我输出。 0不是素数
而不是:n (8)不是质数

最佳答案

您正在循环中递减n。在循环退出时,n的值为0

您可以通过以下方法解决问题:

  • 在循环中使用另一个变量。
  • 保留n的副本,并在循环退出后重置n的值。

  • 这是第二种方法:
    int copyN = n;
    for (int i = 2; n > 0; ++i)
    {
       ...
    }
    
    n = copyN;
    
    if (isPrime(n))
    ...
    

    10-08 20:25