带有||的C++ if语句

ven*_*ven -2 c++ if-statement

如果输入的性别不是M/m/F/f/X/x,我必须打印错误,但我的if语句总是返回true

cout << "Please enter the candidate's information "
        "(enter 'X' to exit).";
cout << endl << "gender: ";
cin.get(gender);
cin.ignore(1000,'\n');

if (gender != 'M' || gender != 'm' || gender != 'F' ||
    gender != 'f' || gender != 'X' || gender != 'x')
    {
        cout << "error";
    }
Run Code Online (Sandbox Code Playgroud)

R S*_*ahu 5

您正在使用错误的布尔运算符.

gender并不是所有人都在同一时间.因此,条件总是会评估为true.你需要使用&&而不是||.

if (gender != 'M' && gender != 'm' && gender != 'F' ||
    gender != 'f' && gender != 'X' && gender != 'x')
{
   cout << "error";
}
Run Code Online (Sandbox Code Playgroud)

它发现它更易于使用:

// Define a function that encapsulates the logic 
bool isValidGender(char gender)
{
   return (gender == 'M' || gender == 'm' || gender == 'F' ||
           gender == 'f' || gender == 'X' || gender == 'x');
}
Run Code Online (Sandbox Code Playgroud)

使用该功能.

if (!isValidGender(gender))
{
   cout << "error";
}
Run Code Online (Sandbox Code Playgroud)

您也可以isValidGender使用switch语句来实现.

bool isValidGender(char gender)
{
   switch (gender)
   {
      case 'M':
      case 'm':
      case 'F':
      case 'f':
      case 'X':
      case 'x':
         true;
   }
   return false;
}
Run Code Online (Sandbox Code Playgroud)

您可以先转换gender为小写字母以简化switch语句.

   switch (std::tolower(gender))
   {
      case 'm':
      case 'f':
      case 'x':
         true;
   }
Run Code Online (Sandbox Code Playgroud)