在循环和函数中使用用户输入

using a user input in a loop and function

本文关键字:用户 输入 循环 函数      更新时间:2023-10-16

我的程序接受用户输入,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");
    }

质数:

#ifndef PRIME_H_RBH300111
#define PRIME_H_RBH300111
bool isPrime(int);
#endif
#pragma once

isPrime(int)的定义

质数.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;
    }
}

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

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

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

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

这是第二种方法:

int copyN = n;
for (int i = 2; n > 0; ++i)
{
   ...
}
n = copyN;
if (isPrime(n))
...

你在 for 循环中递减 n。 for 循环的条件为"n> 0",因此当循环结束时,您知道 n 不是> 0。 您可以将 n 的值保存在不同的变量中(即"int nOrig = n;"(并将其用于素数测试,或者在循环中使用不同的变量。