2017-09-29 4 views
1

他の関連する質問は見ましたが、それは全く意味がありません xcodeを使用しているC++クラスのコンソールプロジェクトを作成しています。bool関数でエラー "制御が非空白関数の終わりに達しました"

プログラムの目標は、数値が素数かどうかを評価することです。 (私の機能の論理がオフになっていることは分かりますが、今はちょうどいいアイデアです) 誰かが間違っていることを教えてくれますか?私はクラスノートを正確に追いかけていますが、私自身の工数である数学部分を除いています。

// Assignment 6 - Prime Number 
// 9-28-17 

#include <iostream> 
#include <cmath> 
using namespace std; 

bool primeCheck(int); //function prototype 

int main() 
{ 
int num;  // declares number for input 

cout << "Enter an integer to see if it is prime. "; 
cin >> num; 

while (num < 1) // validation loop 
{ 
cout << "Invalid. Enter an integer. "; 
cin >> num; 
} 

if (primeCheck(num)) 
    cout << num << " is not prime" << endl; 
else 
    cout << num << " is prime" << endl; 

    return 0; 
} 


bool primeCheck(int val) // function to check for primality 
{ 
    bool status; 

    if ((val %2 != 0) || (val %3 != 0) || (val %5 != 0) 
     || (val %7 != 0) || ((sqrt(val)) != 0)) 
    status = false; 
    else 
    status = false; 
} 
+2

[ツアー](https://stackoverflow.com/tour)に乗り、お読みください[ヘルプページ](https://stackoverflow.com/help)。関連コードを入力してください。ようこそ。 – Ron

+1

あなたは1つのブランチに 'return'を持っていませんか? [最小限の、完全で検証可能な例がない](http://stackoverflow.com/help/mcve)*それ以上は推測できません。また、[良い質問をする方法について読む](http://stackoverflow.com/help/how-to-ask)をご覧ください。 –

+0

コードを画像ではなくコードとして提供してください(https://stackoverflow.com/posts/46483721/edit)。 – Ron

答えて

0

あなたはprimeCheckから何も返されていません。単に結果をステータスに割り当てるだけでは不十分です。関数の最後にreturn statusと書く必要があります。そうすれば、何がprimeCheckを呼び出すかを正確に知ることができます。

bool primeCheck(int val) 
{ 
    bool status; 

    if (val %2 != 0 || val %3 != 0 || val %5 !=0 || (val %7 != 0 && (sqrt(val)) != 0)) 
     status = false; 
    else 
     status = false; 

    return status; 
} 

また、あなたは間違いを犯した可能性があります。とにかく、改善するためにできることがいくつかあります。

  1. あなたのすべての枝(ifelsefalsestatusを割り当てます。おそらく最初のブランチ(iftrueの場合)は、ステータスにtrueを割り当てる必要がありますか?

  2. 通常、中括弧はifelseのステートメントで常に使用することをお勧めします。これが問題のブランチに属するどのようなコード、それは明らかに:

    if (foo) 
        doSomething(); 
        doSomethingElse(); 
    

    は、実際として、コンパイラによって解釈される:

    if (foo){ 
        doSomething(); 
    } 
    doSomethingElse(); 
    
  3. あなたが実際にbool statusを宣言するか、trueを割り当てる必要はありませんかそれにfalse。単に結果を直接返すことができます。これはちょうどいくつかの人々のためのスタイルの問題です。念頭に置いて

、ここにあなたの改良版は、関数である:

bool primeCheck(int val) 
{ 
    if (val %2 != 0 || val %3 != 0 || val %5 !=0 || (val %7 != 0 && (sqrt(val)) != 0)){ 
     return true; 
    } else { 
     return false; 
    } 
} 
+0

ありがとう、とても助かりました。 – d4ma7or

+0

あなたは 'if'を必要とせず、' return(val%2!= 0 || val%3!= 0 || val%5!= 0 ||(val%7!= 0 &&(sqrt(val))!= 0)); ' – Caleth

+0

実際の計算はむしろ疑わしいです。私はOPが 'val%7!= 0 &&(sqrt(val))!= 0'を望んでいるとは思っていません。'(bool logical_and double)not_equal 0' – Caleth

関連する問題