无论输入的数字是多少,我都有一个始终返回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]|
有没有人看到这个问题?
答案 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变量相同。