C++ 对 cin 中的 char 与另一个 char 进行相等性检查永远不等于 true??? (没有编译器错误)
C++ equality check on char from cin against another char never equates to true??? (No compiler errors)
我很困惑为什么当在控制台输入 'n' 或 'y' 时以下条件没有触发。执行的时候出不了if语句,但是我很确定
!(cin >> again)
不是罪魁祸首,因为这以前是 if 语句中的唯一条件,如果输入 character/numeral,我能够 skip/enter if 块,这是预期的。这是代码:
char again;
while (1) {
cout << endl;
cout << "I see another one, care to shoot again? (y/n): ";
if (!(cin >> again) || (again != 'n') || (again != 'y')) {
// Error checking for numberals & non 'y' or 'n' characters
cout << "Please enter 'y' or 'n' only." << endl;
cin.clear();
cin.ignore(1000, '\n');
continue;
}
break;
}
我对此感到难过,因此非常感谢任何帮助!
if(...|| (again != 'n') || (again != 'y')) {
逻辑错误。你说的是
if "again" is not n or it's not y, then do the following...
现在,因为 "again" 不能同时是 n 和 y,所以它总是计算为 true
;最有可能的是,甚至您的编译器也会注意到这一点,并直接跳转到您的 if
的内容。
你想要的是
if(!(cin>>again) || ( again != 'n' && again != 'y') {
因为上面写着
if cin>>again
didn't work or again
is neither n
nor y
then,...
我很困惑为什么当在控制台输入 'n' 或 'y' 时以下条件没有触发。执行的时候出不了if语句,但是我很确定
!(cin >> again)
不是罪魁祸首,因为这以前是 if 语句中的唯一条件,如果输入 character/numeral,我能够 skip/enter if 块,这是预期的。这是代码:
char again;
while (1) {
cout << endl;
cout << "I see another one, care to shoot again? (y/n): ";
if (!(cin >> again) || (again != 'n') || (again != 'y')) {
// Error checking for numberals & non 'y' or 'n' characters
cout << "Please enter 'y' or 'n' only." << endl;
cin.clear();
cin.ignore(1000, '\n');
continue;
}
break;
}
我对此感到难过,因此非常感谢任何帮助!
if(...|| (again != 'n') || (again != 'y')) {
逻辑错误。你说的是
if "again" is not n or it's not y, then do the following...
现在,因为 "again" 不能同时是 n 和 y,所以它总是计算为 true
;最有可能的是,甚至您的编译器也会注意到这一点,并直接跳转到您的 if
的内容。
你想要的是
if(!(cin>>again) || ( again != 'n' && again != 'y') {
因为上面写着
if
cin>>again
didn't work oragain
is neithern
nory
then,...