C++ 如何使用else if语句来比较字母并使其不区分大小写?
我这里有一段代码:C++ 如何使用else if语句来比较字母并使其不区分大小写?,c++,if-statement,equals,C++,If Statement,Equals,我这里有一段代码: string answer1; answerQues1: cout << "So, A, B, C or D?"; cin >> answer1; if (answer1 == "A" | answer1 == "a") { cout << "It's the right answer, you have " << char(156) <<
string answer1;
answerQues1:
cout << "So, A, B, C or D?";
cin >> answer1;
if (answer1 == "A" | answer1 == "a")
{
cout << "It's the right answer, you have " << char(156) << "100!" << endl;
PlaySound(TEXT("C:/Users/user/Downloads/Millionaire/£100correct.wav"), NULL, SND_FILENAME | SND_ASYNC );
Sleep(2000);
}
else if (answer1 >= "E" | answer1 >= "e") //FIX THIS, IT'S ONLY ACCEPTING CAPITALS NOT LOWERCASES.
{
cout << "Whoops, you've entered an incorrect option! Remember, only A, B, C or D are acceptable." << endl;
answer1.erase();
goto answerQues1;
}
else
{
cout << "I'm very sorry, it's an early exit for you - it's the wrong answer! You leave with nothing!" << endl;
PlaySound(TEXT("C:/Users/user/Downloads/Millionaire/£100and£64000lose.wav"), NULL, SND_FILENAME | SND_ASYNC);
Sleep (4000);
PlaySound(TEXT("C:/Users/user/Downloads/Millionaire/gameOver.wav"), NULL, SND_FILENAME | SND_ASYNC);
cout << "Thanks for playing! Press any key to exit the game" << endl;
system("pause");
return 0;
}
字符串应答器1;
答复1:
答案1;
如果(回答1==“A”|回答1==“A”)
{
cout问题是小写字母大于大写字母。请参阅ASCII表格:。您可能需要:
else if ((answer1 >= "E" && answer1 <= "Z") || answer1 >= "e")
else if((answer1>=“E”和&answer1=“E”)
问题是小写字母大于大写字母。请参阅ASCII表格:。您可能需要:
else if ((answer1 >= "E" && answer1 <= "Z") || answer1 >= "e")
else if((answer1>=“E”和&answer1=“E”)
首先,逻辑OR为| |,非|
第二,看一看ASCII表,你会看到'e'>'e',因此对于answer=“b”你的检查答案>“e”是真的。你最好检查值是否在允许的范围内,所以也要给出一个结束值
另外:如果您只接受一个字符作为选择,那么将应答设置为字符而不是字符串
因此,更好的解决方案是
char answer;
if(answer == 'A' || answer == 'a')
...
if(!(('A' <= answer && answer <= 'D') || ('a' <= answer && answer <= 'd'))
...
char答案;
如果(答案=='A'|答案=='A')
...
如果(!(('A'第一,逻辑OR为| |,非|)
第二,看一看ASCII表,你会看到'e'>'e',因此对于answer=“b”你的检查答案>“e”是真的。你最好检查值是否在允许的范围内,所以也要给出一个结束值
另外:如果您只接受一个字符作为选择,那么将应答设置为字符而不是字符串
因此,更好的解决方案是
char answer;
if(answer == 'A' || answer == 'a')
...
if(!(('A' <= answer && answer <= 'D') || ('a' <= answer && answer <= 'd'))
...
char答案;
如果(答案=='A'|答案=='A')
...
如果(!('A'所有字符串都是按某种顺序排列的,比如“0”<“A”<“B”<“C”<“D”<“E”<“X”…<“A”<“B”<“C”<“D”<“E”<“X”等等
所有小写字母都在字母“E”之后,这就是你的测试出错的原因。首先测试可接受的答案,即“A”和“A”,然后是“B”、“B”、“d”,其他所有字母都是不可接受的。所有字符串都按一定顺序排列,如“0”<“A”<“B”<“C”<“d”<“E”<“X”…<“A”<“B”<“C”<“d”<“E”<“X”等等
所有小写字母都在字母“E”之后,这就是你考试出错的原因。首先测试可接受的答案,即“A”和“A”,然后是“B”,“B”,“d”,其他一切都是不可接受的。如果您只接受A、B、C或D,那么为什么不接受输入为字符
,并将其转换为较低的字符。诚然,您也可以使用字符串
一次一个字符
无论如何,这里有一个char的示例:
char answer1;
std::cout << "So, A, B, C or D?";
std::cin >> answer1;
char lower = tolower(answer1);
std::cout <<" You entered: " << lower << std::endl;
char-answer1;
标准::cout>answer1;
char lower=tolower(回答1);
std::cout如果您只接受A、B、C或D,那么为什么不接受作为char
的输入,并将其转换为较低的字符。诚然,您也可以使用string
一次一个字符来实现
无论如何,这里有一个char的示例:
char answer1;
std::cout << "So, A, B, C or D?";
std::cin >> answer1;
char lower = tolower(answer1);
std::cout <<" You entered: " << lower << std::endl;
char-answer1;
标准::cout>answer1;
char lower=tolower(回答1);
std::cout为什么不先将输入大写或小写?逻辑or为| | |,而非|。'e'>='e',所以答案>='e'对于答案=“B”是真的.Ed,我在考虑这个问题,但用户可能有自己的偏好,因此我不希望程序搞砸,将答案视为错误,因为他们将答案放在不同的情况下,我想尝试适应各种可能性:)@SGCSam但您目前将大写和小写视为相同的,那么为什么不将输入大写或小写,并与单个值进行比较,说“E”的大写和小写值将捕获“B”字符,因此它将不起作用,您需要分别处理这些条件yyah,这也可以起作用,但是我认为wolfPack88它也能工作,但谢谢你的回答:)为什么不先输入大写或小写?逻辑or是| |,而不是|。'e'>='e',所以答案>='e'对于答案=“B”是真的.Ed,我在考虑这个问题,但用户可能有自己的偏好,因此我不希望程序搞砸,将答案视为错误,因为他们将答案放在不同的情况下,我想尝试适应各种可能性:)@SGCSam但您目前将大写和小写视为相同的,那么为什么不将输入大写或小写,并与单个值进行比较,说“E”的大写和小写值将捕获“B”字符,因此它将不起作用,您需要分别处理这些条件yyah,这也可以起作用,但是我认为wolfPack88让它也能工作,但谢谢你的回答:)好的,非常感谢,伙计,我现在就试一下,然后给你回复。好的,非常感谢,伙计,我现在就试一下,然后给你回复。更好的方法是在比较之前将字母转换为大写或小写。这消除了1/2的比较表达式。更好的方法是在比较之前将字母转换为大写或小写ing。这消除了1/2的比较表达式。在进行任何比较之前,答案应该传递给toupper
或tolower
。啊,所以toupper基本上将其转换为大写形式,这样就不需要检查这两种情况了?@SGCSam:是的,这就是您可以使用的方法。答案应该传递给toupper
或tolower
。啊,那么toupper基本上会将其转换为大写等效值,这样就不需要检查两种情况了?@SGCSam:是的,这就是您可以使用它的方式。问题是,当我尝试这种方法时,if中的双等值表示“操作数类型不兼容”尝试这样做:if(lower=='a')
char
类型应该是单引号。双引号标识一个字符串
问题是,当我尝试这样做时,if中的双引号表示“操作数类型不兼容”,请尝试这样做:if(lower=='a'))
char
类型应为单引号。双引号表示字符串