【发布时间】: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