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

时间:2017-05-18 20:15:44

标签: c++ function

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

}

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

2 个答案:

答案 0 :(得分:1)

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

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

  1. 使用另一个变量在循环中使用。
  2. 在循环退出后保留n的副本并重置n的值。
  3. 这是第二种方法:

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

答案 1 :(得分:0)

你在for循环中递减n。 for循环具有条件&n;&gt; 0&#39;,所以你知道n isn&t; t&gt;循环结束时为0。您可以将n的值保存在另一个变量中(即&#34; int nOrig = n;&#34;)并将其用于主要测试,或者在循环中使用其他变量。