【问题标题】:Switch Statement Not Allowing First User InputSwitch 语句不允许第一个用户输入
【发布时间】:2025-11-28 04:20:02
【问题描述】:

这个函数检查一个二维字符数组并遍历数组中的每个单词,使用大小,搜索>,这将把它带入一个搜索case的switch语句。

我在 switch 语句中遇到问题,特别是在 switch 语句第一次通过 default 案例时用户输入。

void parseWord(char story[][256], int size)
{
   for (int i = 0; i < size; i++)
   {
      char prompt[256][32];
      if (story[i][0] == '<')
      {
         switch (story[i][1])
         {
            case '#':
               story[i][0] = '\n';
               story[i][1] = 0;
               break;
            case '{':
               story[i][0] = ' ';
               story[i][1] = '\"';
               story[i][2] = 0;
               break;
            case '}':
               story[i][0] = '\"';
               story[i][1] = ' ';
               story[i][2] = 0;
               break;
            case '[':
               story[i][0] = ' ';
               story[i][1] = '\'';
               story[i][2] = 0;
               break;
            case ']':
               story[i][0] = '\'';
               story[i][1] = ' ';
               story[i][2] = 0;
               break;
            default:
               int p = 1;

               prompt[i][0] = (char)(toupper(story[i][1]));
               for (int j = 2; story[i][j] != '>'; j++)
               {
                  if (story[i][j] == '_')
                     prompt[i][p] = ' ';
                  else
                     prompt[i][p] = story[i][j];
                  p++;
               }

               cout << '\t' << prompt[i] << ": ";

               cin.getline(prompt[i], 32);

               int z = 0;
               for (int t=0; prompt[i][t] != '\0'; t++)
               {
                  story[i][t] = prompt[i][t];
                  z++;
               }

               story[i][z] = 0;


         }
      }
   }

   return;
}

cin.getline(prompt[i], 32); 第一次运行时出现问题。

这是我当前运行函数时得到的输出,用户在 * 中输入:

 Web site name:  Verb: *run*
 Plural noun: *dogs*
 Plural noun: *cats*
 Proper noun: *Jimmy*
 Adjective: *smart*
 Noun: *table*
 Noun: *desk*
 Boolean operator: *xor*
 Noun: *shoe*
 Favorite website: *google.com*
 Another website: *yahoo.com*
 Adjective: *cold*
 Emoticon: *:P*

如您所见,运行代码时会跳过cin.getline(prompt[i], 32),并立即转到下一个提示并询问用户输入。这不会使在Verb 中输入的内容等于Web site name 应该是什么,但不允许在Web site name 中输入任何内容并使其为空。 Verb 仍然等于,在本例中为“运行”。

为什么 switch 语句第一次似乎跳过了 cin.getline(prompt[i], 32) 语句? default 案例在第一个案例似乎按预期工作之后运行的所有时间,我无法看到或理解为什么在第一次 default 案例在开关中运行时不允许用户输入。

感谢您的帮助!

【问题讨论】:

标签: c++ switch-statement getline


【解决方案1】:

我发现在我的程序的其他函数中,我收到了cin 的输入。查看Why getline skips first line? 我发现cincin.getline() 不能很好地协同工作。在尝试了cin.ignore() 语句(解决了这个问题但也产生了许多其他问题)之后,我决定使用cin.getline() 专门获取所有输入。现在所有输入都可以使用。

【讨论】:

    最近更新 更多