C++ do/while循环有两个不同的条件

Sam*_*nna 1 c++

我想要do while循环来检查输入的输入是否为R OR P.我认为它正在检查两者,当我运行时它到达那个部分暂停一分钟然后我得到"Cpu Limit Exceeded(在另一个相关的说明中,我是否有破坏某些东西的危险?

/************************************************/
/* Name: servcode                               */
/* Description: Get service type                */
/* Parameters: N/A                              */
/* Return Value: servcode                       */
/************************************************/

char servcode()
{
  char servcode = 'a';                             //Define var for service code
  char serviceyn = 'n';                            //Define var for user verify
  int i = 1;                                       //Define var for sentinel loop

  do {
    cout << "\n" << "\n" << "Please enter your service code, [R]egular or [P]remium:" << "\n";
    cin >> servcode;
    while ((servcode != 'R', 'P') && (i < 3));
    {
        cout << "\n" << "Error - invalid service code, please try again.";
        cout << "\n" << "Please enter your service code: ";
        cin >> servcode;
        i++;
        if (i == 3)
        {
            cout << "\n" << "Too many invalid attempts, program terminating." << "\n"
             << "Have a nice day. " << "\n" << "\n";
            exit (0);
        }     //end if
    }     //end while
    cout << "\n" << "You entered: " << servcode << "\n"
     << "Is that correct? [y,n]";
    cin >> serviceyn;
  } while (serviceyn != 'y'); // end do/while loop

  return servcode;
}
Run Code Online (Sandbox Code Playgroud)

NPE*_*NPE 7

正确的语法是:

while (servcode != 'R' && servcode != 'P' && i < 3)
Run Code Online (Sandbox Code Playgroud)

请注意扩展比较和最后删除分号:

  1. (servcode != 'R', 'P') 是有效的C++,但没有做你期望它做的事情;
  2. 分号使语句成为一个带有空体的循环,因此它会继续执行,因为循环条件永远不会改变.