所以我在这里有这段代码:
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;
}
else if语句检查答案是否大于或等于字母E,因为只有A,B,C或D可以接受。然后它会显示一条告诉用户的消息,删除answer1的值,然后返回到输入部分,基本上是循环。但是,当我输入一个不正确的选项(例如E)并立即输入一个可接受的选项(如B)时,它不接受B作为错误的答案,而不是转到else语句,如果答案是小的话,它会转到其他地方。但是,如果我在大写字母中输入B,它会将其视为错误,并按原样转到else语句。无论如何我可以解决这个问题,以便检测大写和小写字母?非常感谢。
答案 0 :(得分:4)
问题是小写字母大于大写字母。请参阅ASCII表:http://www.asciitable.com/。你可能想要:
else if ((answer1 >= "E" && answer1 <= "Z") || answer1 >= "e")
答案 1 :(得分:2)
首先,逻辑OR是||,而不是|。
其次,看看ASCII表,你会看到&#39;&#39;&#39; E&#39;所以对于答案=&#34; b&#34 ;你的支票答案&gt;&#34; E&#34;是真的。您最好检查允许范围内的值,并给出结束值。
另外:如果你只接受一个字符作为选择,那么回答一个字符而不是一个字符串。
所以更好的解决方案是
char answer;
if(answer == 'A' || answer == 'a')
...
if(!(('A' <= answer && answer <= 'D') || ('a' <= answer && answer <= 'd'))
...
在检查值之前,您还可以考虑在答案中使用toupper
/ tolower
函数。
如果你想要它真的安全,那么请记住,ASCII不是唯一的编码,并不是每个字符编码都能确保&#39; A&#39; +1 ==&#39; B&#39;和&#39; B&#39; +1 ==&#39; C&#39;等等(例如,EBCDIC是另一个字符编码,其中&#39; A&#39; - &#39;我按顺序排列,然后有一个差距而不是来J&#39; - &#39; R&#39)。好的,我知道,ASCII是 标准编码,但知道可能的陷阱并不是最糟糕的想法:)。
答案 2 :(得分:1)
所有字符串都按某种顺序排列,例如“0”&lt; “A”&lt; “B”&lt; “C”&lt; “D”&lt; “E”&lt; “X”......&lt; “a”&lt; “b”&lt; “c”&lt; “d”&lt; “e”&lt; “x”等。
所有小写字母在字母“E”之后,这就是你的测试出错的原因。首先测试 以获得可接受的答案,即“A”和“a”,然后是“B”,“b”,......“d”,其他一切都是不可接受的。
答案 3 :(得分:0)
如果您只接受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;