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,...