我如何循环循环switch语句检查重新检查char?(C )

How can I loop a switch statement to check re-check a char? (C++)

本文关键字:检查 循环 新检查 char switch 何循环 语句      更新时间:2023-10-16

我想确保用户在默认值中输入'a',''','''',b','c'或'd' - 输入角色,直到它匹配上面列出的4个字符之一。我如何循环一个开关语句以确保他们做出了适当的选择?

cout << "Enter the seat that you'd like to place the passenger in: "; cin >> aisle;
    aisle = toupper(aisle);
    switch (aisle){
        case 'A':
        temp = 0;
        break;
        case 'B':
        temp = 1;
        break;
        case 'C':
        temp = 2;
        break;
        case 'D':
        temp = 3;
        break;
        default:
            cout << "Input error, please re-enter an aisle: "; cin >> aisle;
            aisle = toupper(aisle);
        break;
    }

温度是将字符转换为索引值以引用数组的方法。

我会在default情况下设置标志,然后将整个内容放入do-while循环中,例如:

bool tryAgain = false;
do
{
    cout << "Enter the seat that you'd like to place the passenger in: "; cin >> aisle;
    aisle = toupper(aisle);
    switch (aisle){
        case 'A':
            temp = 0;
            break;
        case 'B':
            temp = 1;
            break;
        case 'C':
            temp = 2;
            break;
        case 'D':
            temp = 3;
            break;
        default:
            cout << "Input error, please re-enter an aisle (A, B, C, or D)";
            tryAgain = true;
            break;
    }
}
while (tryAgain);

您无需开关语句即可完成。例如

#include <cstring>
//...
int temp = -1;
cout << "Enter the seat that you'd like to place the passenger in: "; 
do
{
    cin >> aisle;
    aisle = toupper(aisle);
    const char *seats = "ABCD";
    const char *p = strchr( seats, aisle );
    temp = ( p == NULL ? -1 : p - seats ); 
    if ( temp == -1 )
    {
        cout << "Input error, please re-enter an aisle: ";
    }
} while ( temp == -1 );

使用while循环围绕switch语句。

while ( true )
{
   bool breakLoop = true;
   cout << "Enter the seat that you'd like to place the passenger in: ";
   cin >> aisle;
   aisle = toupper(aisle);
   switch (aisle){
      case 'A':
         temp = 0;
         break;
      case 'B':
         temp = 1;
         break;
      case 'C':
         temp = 2;
         break;
      case 'D':
         temp = 3;
         break;
      default:
         cout << "Input error.";
         breakLoop = false;
   }
   if ( breakLoop )
   {
      break;
   }
}

您可以使用 goto语句,例如:

retry:
cout << "Enter the seat that you'd like to place the passenger in: "; 
cin >> aisle;
aisle = toupper(aisle);
switch (aisle){
    case 'A':
        temp = 0;
        break;
    case 'B':
        temp = 1;
        break;
    case 'C':
        temp = 2;
        break;
    case 'D':
        temp = 3;
        break;
    default:
        cout << "Invalid input, please try again. " << endl;
        goto retry;
    break;
}

如果您的脚本有点冗长,我不建议使用goto

您将其标记为C ,并使用了STD :: CIN。也许您应该考虑std :: strings。

在C 中:

 int retVal = -1;
 // for simplicity during development, I use ss for input
 std::stringstream ss;
 ss << "53d";             // change test sequence here
 std::cout << "Enter seat you'd like to place the passenger in: ";
 char aisle;
 do
 {
    ss >> aisle; // use ss instead of cin for development
    // for development, echo user inputs, 
    // but remove the following before release
    std::cout << "  " << aisle << std::endl;
    // toupper returns an int, but aisle is char
    aisle = static_cast<char>(toupper(aisle));
    const std::string Seats = "ABCD";
    size_t indx = Seats.find(aisle);
    if(indx != std::string::npos) // found aisle in Seats
    {
       retVal = aisle - 'A'; // return 0, 1, 2, or 3
       break;  // found - aisle is in range
    }
    std::cout << "Input error, please re-enter an aisle: ";
 } while(true);
 std::cout << "aisle: " << aisle << "   retVal: " << retVal << std::endl;