首页 > 解决方案 > 将布尔值传递给另一个无法正常工作的函数?

问题描述

对 C++ 非常陌生,只使用了几天。我正在尝试编写一个简单的控制台计算器,它要求用户输入 Y 或 N 以确认打印的结果实际上是正确的。

我调用了一个函数,该函数要求用户输入一个字符作为 Y/N,然后根据输入的内容将其作为布尔值返回为真或假。然后它使用该 bool 返回到 main,然后将其传递给另一个函数,该函数根据传递的是 true 还是 false 来打印文本。但是,每当我运行程序时,它总是会打印出真假两个语句。我确定我在使用布尔值时违反了某种规则,或者存在某种小错误,但我似乎找不到它。任何帮助将不胜感激。

bool getConfirmation()
{
    std::cout << "Is this result correct? Y/N: ";
    char confirm;
    std::cin >> confirm;
    if (confirm == 'Y', 'y') return true;
    if (confirm == 'N', 'n') return false;
    else return false;
}

void confirmResult(bool confirm)
{
    if (confirm == true)
        std::cout << "Result is correct.";
    if (confirm == false)
        std::cout << "Sorry, please try again.";
    else
        std::cout << "Sorry, please try again.";
}

int main()
{
    std::cout << "Please input the first integer: ";
    int x{ getInteger() };
    std::cout << "Please input the desired operation: ";
    char op{ getOperation() };
    std::cout << "Please input the second integer: ";
    int y{ getInteger() };
    int result{ calculateResult(x, op, y) };
    printResult(result);
    bool confirm{ getConfirmation() };
    confirmResult(confirm);
    return 0;
}

标签: c++boolean

解决方案


confirm == 'Y', 'y'不会做你认为它做的事 - 这是一个涉及内置逗号运算符的表达式,它总是计算为. 正确的代码是:'y'

confirm == 'Y' || confirm == 'y'

你总是会看到两者

  • std::cout << "Result is correct.";

  • std::cout << "Sorry, please try again.";

因为您的布尔逻辑不正确而被执行。

if (confirm == true)
    A
if (confirm == false)
    B
else
    C

如果confirm == true,则 A 和 C 都将被执行,因为第二if条语句不是由 a 引入的else。你的逻辑应该是:

if (confirm == true)
    std::cout << "Result is correct.";
else
    std::cout << "Sorry, please try again.";

推荐阅读