我刚刚开始学习C ++,所以我确定我显然缺少这方面的东西。如果有人能启发我,我会喜欢的。谢谢!
我正在尝试在c ++中创建一个循环来检查变量的char值(它可以是这些“ Y”,“ y”,“ N”,“ n”中的任何一个),如果以下情况返回错误消息:按下了错误的字符,并要求用户输入新的字符。如果输入正确,则应继续。
由于某种原因,即使输入正确,也会显示错误消息,这使我陷入无限循环。
char answer{' '}; // Initialize char with nothing.
std::cin>>answer; // take user input
while (answer != 'n' || answer != 'N' || answer != 'Y' || answer != 'y')
{
std::cout<<"Error: Please press 'Y' for yes and 'N' for no, followed by 'ENTER'. \n";
std::cin>>answer;
}
答案 0 :(得分:3)
考虑一下表达式answer != 'n' || answer != 'N'
,因为answer
不能同时位于'N'
和'n'
,所以这始终是正确的,{ {1}}将始终与answer
不同或与'n'
不同。明白我的意思吗?
答案 1 :(得分:2)
更改||至 &&。如果char不是'n'并且char不是'N'并且char不是'Y'并且char不是'y'然后显示错误。
答案 2 :(得分:2)
请使用And条件更改您的Or条件。
#include <iostream>
using namespace std;
int main()
{
char answer{' '};
std::cin>>answer;
while (answer != 'n' && answer != 'N' && answer != 'Y' && answer != 'y')
{
std::cout<<"Error: Please press 'Y' for yes and 'N' for no, followed by 'ENTER'. \n";
std::cin>>answer;
}
return 0;
}
答案 3 :(得分:1)
我要加上括号:
do {
std::cin>>answer
} while ((std::toupper(answer) != 'N') && (std::toupper(answer) != 'Y'));
操作员具有优先权,使用Beta编译器时可能会引入一些微妙的错误。