簡體   English   中英

素數C ++程序

[英]C++ Program for Prime Factors

我正在嘗試構建一個程序,要求用戶輸入一個正整數,然后輸出該數字的素數。 我為用戶提供了三種嘗試輸入有效輸入或程序結束的嘗試。 因此,任何負整數和非整數以及其他字符(例如字母)都將給出錯誤消息。 我快到了,但是我的輸出不會達到我想要的狀態。 它將十進制數視為整數,負數不返回錯誤。

#include <iostream>
#include <iomanip>
#include <cmath>
#include <stdio.h>

using namespace std;

int main()
{
    int num,i,flag,n;



    //executes loop if the input fails (e.g., no characters were read)
    while (cout << "Enter a number: " && !(cin >> num)) 
    {
        cin.clear(); //clear bad input flag
        cin.ignore(numeric_limits<streamsize>::max(), '\n'); //discard input
        cout << "Invalid input, please re-enter: \n";
    }

    i=2;
    n=num;
    cout<< "\nThe Prime factors of "<< num << " are:"<< endl;
    while(i<=num)
    {
        flag=0;
        while(n%i==0)
        { 
            n=n/i;
            flag++;
        }
        if(flag>0)
        {
            cout <<i<< endl;
        }
        ++i;
     }


     system("PAUSE");
     return 0;
}

輸入負數不會出錯,因為您不會在輸入驗證中檢查該數字。 您可以添加到while條件中,以檢查是否為負輸出,如下所示:

while (cout << "Enter a number: " && (!(cin >> num) || num <= 0)) 

您沒有捕獲十進制數字輸入的原因是cin成功地轉換了輸入並將其存儲到小數點,然后停止,從而將輸入的其余部分保留在緩沖區中。 我們可以看到:

#include <iostream>

int main() 
{
    int foo;
    double bar;
    std::cin >> foo;
    std::cin >> bar;
    std::cout << foo << std::endl;
    std::cout << bar;
}

輸入:

5.82

輸出:

5
0.82

現場例子

您可以在while循環條件中添加一個檢查,以查看流中是否還有更多輸入在等待

while (cout << "Enter a number: " && (!(cin >> num) || num <= 0 || cin.get() != '\n'))

至於僅循環三次,您可以在程序中添加一個計數器,並在每次循環主體執行時遞增該計數器。 一旦計數器達到3,您將退出程序

int counter = 0;
while (cout << "Enter a number: " && (!(cin >> num) || num <= 0 || cin.get() != '\n'))
{
    if (counter == 3)
        return 0;  // exit
    cin.clear(); //clear bad input flag
    cin.ignore(numeric_limits<streamsize>::max(), '\n'); //discard input
    cout << "Invalid input, please re-enter: \n";
    counter++;
}

!(cin >> num)僅在cin無法將輸入字符數據插入num時才為true,num是一個int 負整數(例如-12)和十進制數量(例如3.14)都可以填充到有符號的int 十進制數量有效,因為float可以通過截斷被強制轉換為int

要執行所需的操作,首先需要將控制台輸入捕獲為字符串,然后嘗試解析出正整數。 看一看如何檢查C ++字符串是否為int? 以及boost::lexical_cast (如果可以選擇boost)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM