該函數檢查二維字符數組,然後遍歷數組中的每個單詞,使用大小搜索>
,該單元將把它放入搜索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
案例時不允許用戶輸入。
感謝您的幫助!
[爲什麼getline跳過第一行?](http://stackoverflow.com/questions/5918451/why-getline-skips-first-line) – Pradhan