gpt4 book ai didi

c++ - boolean 函数错误 "Control reaches end of non-void function"

转载 作者:太空宇宙 更新时间:2023-11-04 12:56:21 24 4
gpt4 key购买 nike

我看了其他相关问题,但不太明白我正在使用 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;
}

最佳答案

您还没有从 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;
}

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

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

关于c++ - boolean 函数错误 "Control reaches end of non-void function",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46483721/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com