2010-02-17 76 views
3

我是初學者到C++和編寫一個程序,接受用戶的選擇,並根據它行事......我唯一的問題是,當用戶輸入大寫選擇...該程序將其視爲一個錯誤的選擇...像如果'e'是輸入數字的選擇..如果用戶輸入'E',程序將不會顯示「輸入數字」消息..我可以修復它嗎?我盡我所能,但我無法得到它的工作..哦,我怎麼能在開關案件中添加大寫字母? 這是代碼的一部分,負責根據用戶的選擇採取行動。應該寫什麼代碼才能接受大寫和小寫選擇?

#include <iostream> 
#include <cstring> 
using namespace std; 

int main(){ 

char choice ; 

for(;;){ 
    do{ 
     cout << endl ; 
     cout << "(e)nter." << endl ; 
     cout << "(d)isplay." << endl; 
     cout << "(u)pdate." << endl ; 
     cout << "(r)eset. " << endl; 
     cout << "(q)uit." << endl; 
     cout << endl; 
     cout << "Choose one : " ; 
     cin >> choice ; 

     if(!strchr("edurq",choice) && (choice>=97&&choice<=122)){ 
     cout << "Enter e,d,u or q " << endl;} 

     else if(!strchr("EDURQ",choice) && (choice<97&&choice>122)){ 
     cout << "Enter E,D,U or Q " << endl;} 

    }while(!strchr("edurqEDURQ",choice)); 

switch (choice) { 
    case 'e' : enter(); break ; 
    case 'd' : display(); break ; 
    case 'u': update() ; break ; 
    case 'r' : reset() ;break; 
    case 'q' : return 0; 
    } 

    } 
} 
+0

',和strchr( 「EDURQ」,選擇)&&(選擇<97&&choice> 122)'!沒有什麼能既'<97' and '> 122',是不是多餘的用'strchr'通話無論如何? – 2010-02-17 18:32:38

回答

5

如果您在switch語句中沒有找到匹配它的案例,將繼續到下一個案例。如果您在每個小寫選擇之前放置資本案例,它將會失敗。

switch (choice) { 
    case 'E' : 
    case 'e' : enter(); break ; 
    case 'D' : 
    case 'd' : display(); break ; 
    case 'U' : 
    case 'u': update() ; break ; 
    case 'R' : 
    case 'r' : reset() ;break; 
    case 'Q' : 
    case 'q' : return 0; 
    } 

的另一種選擇是一個字符串函數適用於用戶輸入將其改爲小寫,在這種情況下,現有的switch語句會工作。

+4

這很愚蠢,因爲你需要輸入一切兩次。爲什麼不使用tolower呢? – 2010-02-17 18:11:04

+1

他也指出了這一點。 – rafael 2010-02-17 19:44:05

0

這是在案例陳述中使用fall的最佳時機。

switch (choice) 
{ 
    case 'E': 
    case 'e': 
     enter(); 
     break; 
    // etc. 
} 
8

使用tolower函數將您的輸入轉換爲小寫,然後您只需要擔心小寫選項。

0

大寫和小寫字符使用不同字符代碼。因此,如果您在交換機中只使用小寫字母的情況下,您將只測試一種類型的情況。

您應該改進switch語句測試,如其他示例所示,或將choice字符轉換爲小寫字母。通過這種方式確保您爲交換機測試提供預期的情況。

-2

哈克它

switch (choice | 0x20) { 
    ... 
+1

哦,請......爲什麼你不使用一個適當的功能:(? – 2010-02-17 18:30:25

+0

我是「黑客」:-)) – wqw 2010-02-17 18:50:59