【问题标题】:error with a bool function "Control reaches end of non-void function"布尔函数错误“控制到达非无效函数的结尾”
【发布时间】:2017-09-29 07:20:13
【问题描述】:

我查看了其他相关问题,但无法完全理解 我正在使用 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;
 }

【问题讨论】:

标签: c++ function compiler-errors boolean


【解决方案1】:

您没有从 primeCheck 返回任何东西。仅仅将结果分配给状态是不够的,您需要在函数末尾写上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;
 }

另外我认为你可能犯了一个错误,无论如何你可以做一些事情来改进它。

  1. 您的所有分支(ifelse)将false 分配给status。大概是第一个分支(当iftrue 时)应该将true 分配给状态?

  2. 通常最好在ifelse 语句中始终使用大括号。这清楚地表明了哪些代码属于所讨论的分支:

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

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

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

考虑到这一点,这里有一个改进版的你的函数:

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

【讨论】:

  • 你甚至不需要if,你可以做return (val %2 != 0 || val %3 != 0 || val %5 !=0 || (val %7 != 0 &amp;&amp; (sqrt(val)) != 0));
  • 实际计算也相当可疑。我怀疑 OP 想要 val %7 != 0 &amp;&amp; (sqrt(val)) != 0,因为那是 (bool logical_and double) not_equal 0
猜你喜欢
  • 2020-10-31
  • 2017-12-09
  • 1970-01-01
  • 1970-01-01
  • 2016-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
相关资源
最近更新 更多