2014-06-26 71 views
0

該函數檢查二維字符數組,然後遍歷數組中的每個單詞,使用大小搜索>,該單元將把它放入搜索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案例時不允許用戶輸入。

感謝您的幫助!

+0

[爲什麼getline跳過第一行?](http://stackoverflow.com/questions/5918451/why-getline-skips-first-line) – Pradhan

回答

0

我發現在我的程序中的其他函數中,我收到的輸入是cin。看着Why getline skips first line?我看到cincin.getline()不能很好地協同工作。在嘗試cin.ignore()語句(解決了此問題但創建了許多其他語句)後,我決定僅使用cin.getline()獲取所有輸入。所有輸入現在都可用