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
类型应为单引号。双引号表示
字符串