bool函数错误"控制到达非空函数的结束"

时间:2017-09-29 07:20:14

标签: c++ function compiler-errors boolean

我看了其他相关的问题但却无法理解它 我正在使用xcode为我的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;
 }

1 个答案:

答案 0 :(得分: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. 您的所有分支(ifelse)都会将false分配给status。可能是第一个分支(iftrue时)应该将true分配给状态?

  2. 通常,在ifelse语句中始终使用大括号是一种很好的做法。这清楚地表明了哪些代码属于相关分支:

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

    实际上会被编译器解释为:

    if ( foo ){
        doSomething();
    }
    doSomethingElse();
    
  3. 您实际上并不需要声明bool status或指定truefalse。您可以直接返回结果。虽然这只是某些人的风格问题。

  4. 考虑到这一点,这是你的功能的改进版本:

    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;
        }
     }