C++ 布尔函数出错;控制达到非无效函数的末尾“;

C++ 布尔函数出错;控制达到非无效函数的末尾“;,c++,function,compiler-errors,boolean,C++,Function,Compiler Errors,Boolean,我看了其他相关的问题,但不太明白 我正在使用XCODEX.为C++类编写控制台项目。 该程序的目标是评估一个数是否为素数。 (我意识到我的函数的逻辑是关闭的,这只是目前的一个工作想法) 有人能告诉我我做错了什么吗?除了我自己设计的数学部分外,我完全按照课堂笔记做 // Assignment 6 - Prime Number // 9-28-17 #include <iostream> #include <cmath> using namespace std; bool

我看了其他相关的问题,但不太明白 我正在使用XCODEX.

为C++类编写控制台项目。 该程序的目标是评估一个数是否为素数。 (我意识到我的函数的逻辑是关闭的,这只是目前的一个工作想法) 有人能告诉我我做错了什么吗?除了我自己设计的数学部分外,我完全按照课堂笔记做

// 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;
 }
//赋值6-素数
// 9-28-17
#包括
#包括
使用名称空间std;
布尔素数检查(int)//功能原型
int main()
{
int num;//声明输入的数字
cout>num;
while(num<1)//验证循环
{
cout>num;
}
if(primeCheck(num))

cout您没有从primeCheck返回任何内容。仅将结果分配给status是不够的,您需要在函数末尾写入
返回状态
,以便if确切知道它应该返回到调用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;
 }
我还认为你可能犯了一个错误,无论如何,你可以做一些事情来改进它

  • 您的所有分支(如果
    if
    else
    )都将
    false
    分配给
    状态
    。假设第一个分支(如果
    if
    )应该将
    分配给状态

  • 通常情况下,最好在
    if
    else
    语句中使用花括号。这样可以明确哪些代码属于所讨论的分支:

    if ( foo )
        doSomething();
        doSomethingElse();
    
    编译器实际上会将其解释为:

    if ( foo ){
        doSomething();
    }
    doSomethingElse();
    
  • 实际上,您不需要声明
    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;
        }
     }
    

    您尚未从primeCheck返回任何内容。仅将结果分配给status是不够的,您需要在函数末尾写入
    return status
    ,以便if确切知道它应该返回到调用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;
     }
    
    我还认为你可能犯了一个错误,无论如何,你可以做一些事情来改进它

  • 您的所有分支(如果
    if
    else
    )都将
    false
    分配给
    状态
    。假设第一个分支(如果
    if
    )应该将
    分配给状态

  • 通常情况下,最好在
    if
    else
    语句中使用花括号。这样可以明确哪些代码属于所讨论的分支:

    if ( foo )
        doSomething();
        doSomethingElse();
    
    编译器实际上会将其解释为:

    if ( foo ){
        doSomething();
    }
    doSomethingElse();
    
  • 实际上,您不需要声明
    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;
        }
     }
    

    请拍摄并阅读。请提供相关代码。欢迎访问SO。您没有一个分支中的
    return
    ?如果没有a,就不可能猜到更多。另外请。请将代码作为代码,而不是图像。对不起,各位,我将在将来进行巡演并对问题进行适当的格式化。我计划在这里进行多次。缩进是ey电子测量请阅读。请提供相关代码。欢迎访问SO。您没有一个分支机构中的
    返回值
    ?如果没有a,就不可能猜到更多。另外,请将代码作为代码,而不是图像。对不起,各位,我将在将来进行巡演并对问题进行适当的格式化。我计划在这里进行一段时间ion是目测,你甚至不需要
    ,如果
    ,你可以做
    返回(val%2!=0 | | | val%3!=0 | | val%5!=0 | |(val%7!=0&(sqrt(val))
    实际计算也很可疑。我怀疑OP想要
    val%7!=0&(sqrt(val))!=0
    ,因为这是
    (bool-logical\u和double)不等于0
    你甚至不需要
    如果
    ,你可以做
    返回(val%2!=0 | | | val%3!=0 | | val%5!=0 | |(val%7!=0&&(sqrt(val));
    实际计算也很可疑。我怀疑OP想要
    val%7!=0&(sqrt(val))!=0
    ,因为这是
    (bool\u和double)不等于0