警告:函数将始终返回True

时间:2014-06-19 19:38:51

标签: c++ function boolean

无论输入的数字是多少,我都有一个始终返回true的isPrime函数。对于我的程序中的其他两个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]|

有没有人看到这个问题?

5 个答案:

答案 0 :(得分:3)

您需要将调用中的返回值存储到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)的相同问题。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

该上下文中的函数名称计算为指向该函数的指针。由于所有非空指针都计算为boolean true并且指向任何函数的指针不能等于空指针,isNum始终求值为true!isNum始终为false

而不是:

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

你需要写更多这样的东西:

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

答案 3 :(得分:1)

这两行:

isPrime(firstPrime);

while(!isPrime);

结合起来建议你不清楚在C ++中如何调用函数。第一行调用该函数,然后抛出结果。第二行甚至没有调用函数,只是查看它的地址(永远不会为零)。

你可能想要:

while(!isPrime(firstPrime));

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

答案 4 :(得分:1)

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

与isNum变量相同。

相关问题