警告:函数将始终返回True

Warning: Function will always return True

本文关键字:返回 True 函数 警告      更新时间:2023-10-16

我有一个isPrime函数,无论输入的数字是什么,它总是返回true。我的程序中的其他几个bool函数也是如此。

我的简单isPrime函数:

bool isPrime(mpz_class num)
{
    bool prime = true;
    for (int i=2; i<num; i++)
        if (num % i == 0)
            prime = false;
    return prime ;
}

调用它(我怀疑这就是问题所在,但我不知道问题是什么):

do
    {
        do
        {
            cout << "Enter Prime 1: ";
            getline(cin, sa);
            isNum(sa);
            firstPrime = sa;
        }
        while(!isNum);
    isPrime(firstPrime);
    }
    while(!isPrime);

isNum函数每次也返回"true"。

运行时错误:

warning: the address of 'void isNum(std::string)' will always evaluate as 'true' [-Waddress]|

有人看到问题了吗?

您需要存储调用isNum()的返回值,然后才能在while检查中检查它。你现在在用

做什么?
    while(!isNum)

表示您正在检查函数的地址,而不是它的返回类型。您可能想要做的是像这样的事情:

    bool isPrimeRetVal;
    do
    {
        bool isNumRetVal;
        do
        {
            cout << "Enter Prime 1: ";
            getline(cin, sa);
            isNumRetVal = isNum(sa);
            firstPrime = sa;
        }
        while(!isNumRetVal);
        isPrimeRetVal = isPrime(firstPrime);
    }
    while(!isPrimeRetVal);

注意与while(!isPrime)相同的问题。

忽略isPrime的返回值,而检查isPrime(这不会改变,它始终是一个有效的函数)

您不是仅仅通过提及其名称来调用函数,例如while (!isNum)

该上下文中的函数名计算结果为指向该函数的指针。由于所有非空指针的值都是布尔值true,并且指向任何函数的指针都不可能等于空指针,因此isNum的值总是true,而!isNum的值总是false。

而不是:

do { ... isPrime(x); } while (!isPrime);

你需要写一些像这样的东西:

do { ... } while (!isPrime(x));

这两行:

isPrime(firstPrime);
while(!isPrime);

组合表明你不清楚c++中函数是如何调用的。第一行调用函数,然后丢弃结果。第二行甚至没有调用函数,它只是查看它的地址(永远不会为零)。

您可能需要:

while(!isPrime(firstPrime));

firstPrime传递给函数,然后查看函数的返回值。

您没有使用isPrime函数的返回值。IsPrime是一个函数,你应该将它的值存储在某个变量中,并在while循环中使用该变量。

isNum变量也是如此