【问题标题】:Finding Prime Number: error: control reaches end of non-void function查找素数:错误:控制到达非空函数的结尾
【发布时间】:2019-11-18 09:41:58
【问题描述】:

我正在编码以查找素数并使用以下代码将结果提取为布尔值(真/假或 1/0)。

#include <iostream>
using namespace std;

bool isPrimeNumber(int n) {
    int m, i;
    m = n / 2;
    for (i = 2; i < m; i++) {
        if (n % i == 0) {
            return true;
        } else {
            return false;
        }
    }
}
int main() {
    cout << isPrimeNumber(33);
    return 0;
}

(这里的结果应该是 0,因为 67 是质数)

(我跳过了负数和0,1,但我稍后会添加)

然后在第 9 行,它说“错误:控制到达非 void 函数的末尾。”

我试图在 Internet 上找到解决方案,当然还有 StackOverflow。但我的代码仍然正确且可构建。

我认为这与将警告视为错误有关(作为初学者,我根据建议对其进行了更改)。但我不想改回来,因为我还在学习。

你有没有办法在不将我的设置恢复正​​常的情况下解决这个问题?

【问题讨论】:

    标签: c++ boolean primes


    【解决方案1】:

    当 n 为奇数时,您会得到错误:

    错误:控制到达非空函数的结尾。

    您正在检查 n 仅能被一个值 i=2 整除。您必须检查从 2 到 m 的 i 的每个值。

    for循环迭代完成后返回false
    更改您的isPrimeNumber() 函数如下:-

    bool isPrimeNumber(int n){
    int m,i;
    m = n/2;
        for (i=2;i<m;i++){
          if (n % i == 0){
             return true;
          }
        }
     return false;
    }
    

    【讨论】:

    • 你能解释清楚一点吗?我知道这解决了我的问题,但是如何解决?你也不能在 IF 语句中使用 ELSE 吗?
    • 您的代码仅检查 n 是否可被一个数字 2 整除,您必须检查 i 的每个值。如果它不能被 2 整除,则您的代码将返回 false。
    • 补充一点说明:你得到编译器错误的原因是在m &lt;= i的情况下,你的原始循环根本不会运行,你的函数将结束而不返回任何东西。编译器希望该函数返回 bool,但发现情况并非如此,因此报错。
    • 是的,当 n 为奇数时,它不会返回 bool 并给出错误。
    猜你喜欢
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    • 2014-11-25
    • 2022-01-25
    • 1970-01-01
    相关资源
    最近更新 更多