2015-08-24 45 views
-1

我試圖做到這一點:C++循環各非黃金

  1. 用戶選擇一個數
  2. 程序調用的函數isaPrime()所以我們看到,如果數是素數或不。

我想做一個循環,所以每次數字不是素數時,用戶必須選擇一個新值。

下面的代碼:

#include <iostream> 
#include <math.h> 

using namespace std; 

bool isPrime (int num) 
{ 
    if (num <=1) 
     return false; 
    else if (num == 2) 
     return true; 
    else if (num % 2 == 0) 
     return false; 
    else 
    { 
     bool prime = true; 
     int divisor = 3; 
     double num_d = static_cast<double>(num); 
     int upperLimit = static_cast<int>(sqrt(num_d) +1); 

     while (divisor <= upperLimit) 
     { 
      if (num % divisor == 0) 
       prime = false; 
      divisor +=2; 
     } 
     return prime; 
    } 
} 

int main() 
{ 
    int p; 
    do { 
     cout << "p : "; 
     cin >> p; 
     isPrime(p); 
    } while (isPrime(p)); 

} 
+0

這是不是真的很有趣...... 如果我來到這裏就意味着我無法自己做。 如果你只是在這裏找到無用的帖子,那就離開那裏吧。 –

+1

http://stackoverflow.com/help/mcve問題是題外話題!你現在要做什麼? –

+0

我做了所有這些事情...... –

回答

2

這應該處理您的用戶I/O循環。您只需要將isPrime函數替換爲您自己的實現。

代碼


#include <iostream> 
#include <iomanip> 
#define isPrime(x) (1) 

int main(void) 
{ 
    using namespace std; 

    const int maxchar = 5; 
    string nationname; 
    int input; 
    int running = 1; 

    while (running) 
    { 
     cout << "Enter a number:"; 
     cin >> input; 
     if (isPrime(input)) 
     { 
      // Do something 
      running = 0; 
     } 
     else 
     { 
      cout << "Not a prime number. Please try again!" << endl; 
     } 
    } 

    return 0; 
} 
+0

感謝!我搜索它真的再次感謝! –

0

如果刪除了做循環您的代碼將工作。這是因爲只要isprime返回true,循環就會運行,並且當isprime返回false時將停止運行。

此外,如果你想顯示的號碼是否爲素數,你應該使用cout << isPrime(p);

這樣你的主要funcion應該像

int main() 
{ 
    int p; 
    cout << "p : "; 
    cin >> p; 
    cout << isPrime(p); 
} 
+1

這不是我想要的,Dogbert回答。 但是,感謝您的貢獻! –

0

根據你的問題:當用戶選擇非黃金循環次數。你在做什麼是反向所以只需更換

else{ 
bool prime =false //replaced to true 
//your code 
while (divisor <= upperLimit) 
    { 
     if (num % divisor == 0) 
      { 
       prime = true; //replaced to true 
       break; 
      } 
     divisor +=2; 
    } 
    return prime;