在程序中使用布尔函数时遇到麻烦

时间:2015-11-11 01:28:00

标签: c++ function boolean

我在使用布尔循环时遇到问题。我知道它们是真/假功能,但是当我运行程序时,它似乎总是返回“真实”值。 main 是一个设置pass = true,还是 targetHR 将值设置为true?我很难过。

#include <iostream>
using namespace std;
bool targetHR(int, int);

int main()
{
    int age = NULL, heartbeat;
    while (age >= 0)
    {
        cout << "Enter your age: ";                    // Receives age from the user.
        cin >> age;
        if (age < 0)
        {
            break;
        }
        cout << "enter your heart beats per minute: "; // Receives heartbeat from user.
        cin >> heartbeat;
        bool pass = targetHR(age, heartbeat);
        if (pass = true)
        {
            cout << "You are in your target heart rate." << endl;
        }
        if (pass = false)
        {
            cout << "You are not in your target heart rate." << endl;
        }
        cout << endl;
    }

    return 0;
}

我的目标是让 targetHR 成为进行计算的人,并告诉main函数是否为true / false。我希望 main 只有一个依赖于 targetHR 的响应。

bool targetHR(int age, int heartbeat)
{
    double maxHR, minTHR, maxTHR;
    maxHR = 220 - age;
    minTHR = maxHR * 0.60;
    maxTHR = maxHR * 0.70;
    // Debugging purposes.
    // cout << "Max heartrate: " << maxHR << endl << "Min Target HR: " << minTHR << endl << "Max Target HR: " << maxTHR << endl;

    if (heartbeat < minTHR || heartbeat > maxTHR)
    {
        return false;
    }
    else
    {
        return true;
    }
}

我尝试通过使用1/0更改true / false来解决问题,但这并没有解决我的问题,所以我假设这不是问题。

1 个答案:

答案 0 :(得分:2)

  

它似乎总是返回“真实”值

由于您未使用Comparison operator,因此您使用的是Assignment operator,它会返回分配给支票的值,因此pass = true始终为true,并且pass = false始终为false。你应该改变

if (pass = true)

if (pass == true) 

或只是

if (pass)

BTW:有些编译器(例如clang)会给出警告,不要忽略它们。

  

警告:将作业结果用作条件而不使用   括号
  注意:使用'=='将此分配转换为相等比较