#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无论输入是什么。
我觉得必须有一些我不了解布尔人的事情。
答案 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
检查所有可能性。见上文。