我遇到布尔接受器的问题

时间:2016-09-03 21:41:48

标签: c++ boolean

#include "stdafx.h"
#include <iostream>
#include <string>

void WorldBuilder();
bool Acceptor();

int main()
{
bool IsAcceptable = (false);

while (IsAcceptable == (false))
    {
        WorldBuilder(); // build world
            IsAcceptable = Acceptor();
    }
    return 0;
}

// Builds the world
void WorldBuilder()
{
std::cout << "Building World...\n";
return;
}

bool Acceptor()
    {
        std::cout << "Is world build acceptable? (y/n) ";
        std::string qIsAcceptable = "";
        std::cin >> qIsAcceptable;

if (qIsAcceptable[1] == 'y')
    {
        return (true);
    }
else if (qIsAcceptable[1] == 'n')
    {
        return (false);
    }

}

当我调试它时,它从elses而不改变IsAcceptable布尔值并返回到WorldBuilder()和布尔值跳转到true无论输入是什么。

我觉得必须有一些我不了解布尔人的事情。

2 个答案:

答案 0 :(得分:1)

变化:

if (qIsAcceptable[1] == 'y')
    {
        return (true);
    }
else if (qIsAcceptable[1] == 'n')
    {
        return (false);
    }

if (qIsAcceptable[0] == 'y')
    {
        return (true);
    }
else if (qIsAcceptable[0] == 'n')
    {
        return (false);
    }

C / C ++数组算术从0开始,而不是1

答案 1 :(得分:0)

在此功能中

bool Acceptor()
{
    std::cout << "Is world build acceptable? (y/n) ";
    std::string qIsAcceptable = "";
    std::cin >> qIsAcceptable;

    if (qIsAcceptable[1] == 'y')
    {
        return (true);
    }
    else if (qIsAcceptable[1] == 'n')
    {
        return (false);
    }

}

您正在以错误的方式检查字符。数组子脚本从零开始,而不是一个。您的代码现在应该是:

#include <cctype>
//....
bool Acceptor()
{
    std::cout << "Is world build acceptable? (y/n) ";
    char qIsAcceptable = 'b';
    std::cin >> qIsAcceptable;

    if (std::tolower(qIsAcceptable) == 'y')
    {
        return true;
    }
    else if (std::tolower(qIsAcceptable) == 'n')
    {
        return false;
    }

}

此外,如果您已注意到,我已删除(true)(false)周围的括号。它们不是必需的,所以你应该删除它们。我还添加了对代码的更改,您可以查看是否需要。一个是将用户输入转换为char,然后使用std::tolower检查所有可能性。见上文。

相关问题