2009-11-19 28 views
0

我有以下代碼可以正常工作。不過之後我添加一個else語句什麼結果總是爲別人C++字符串操作 - 如果STU

wgetstr(inputWin, ch); //get line and store in ch variable 
     str = ch;   //make input from char* to string 


     if(str=="m" || str=="M"){ 
      showFeedback("Data Memory Updated"); 
     } 
     if(str=="p" || str=="P"){ 
      showFeedback("Program Memory Updated"); 
     } 
     if(str=="g" || str=="G"){ 
      showFeedback("Accumulator, Program Counter, Zero Result Updated"); 
     } 
     if(str=="e" || str=="E"){ 
      showFeedback("Editing Mode Enabled"); 
     } 
     if(str=="c" || str=="C"){ 
      showFeedback("Program Copied Into Program Memory"); 
     } 
     if(str=="r" || str=="R"){ 
      showFeedback("Executing Program"); 
     } 
     if(str=="x" || str=="X"){ 
      showFeedback("Program Exited"); 
     } 

前面所有的評估的基礎上正確輸入的是什麼。即如果我輸入「m」,它會調用showeFeedback(「更新數據內存」),但如果添加下面的else語句,無論輸入什麼內容,我都會收到「Invalid Command Entered」。

else{ 
      showFeedback("Invalid Command Entered"); 
     } 
+0

這與您的問題無關,但您可以考慮將您的str轉換爲上(或下)情況,以便在條件中不包含所有這些||。 – 2009-11-19 19:54:18

回答

9

所有這些都是獨立的if語句。你添加的其他東西只與最後一個一起。如果對else if進行更改,但它應該像您期望的那樣工作。

+0

你是對的。我不知道我是怎麼做到的。我不是那個小白。謝謝。 – user69514 2009-11-19 18:39:17

5

如果除了第一個以外的所有東西都需要使用else。

所以,簡單地更改現有代碼:

 if(str=="m" || str=="M"){ 
      showFeedback("Data Memory Updated"); 
     } 
     else if(str=="p" || str=="P"){ 
      showFeedback("Program Memory Updated"); 
     } 
     else if(str=="g" || str=="G"){ 
      showFeedback("Accumulator, Program Counter, Zero Result Updated"); 
     } 
     else if(str=="e" || str=="E"){ 
      showFeedback("Editing Mode Enabled"); 
     } 
     else if(str=="c" || str=="C"){ 
      showFeedback("Program Copied Into Program Memory"); 
     } 
     else if(str=="r" || str=="R"){ 
      showFeedback("Executing Program"); 
     } 
     else if(str=="x" || str=="X"){ 
      showFeedback("Program Exited"); 
     } 
     else 
     { 
      showFeedback("Invalid Command Entered"); 
     } 
1

因爲當你添加else時,它對if(str ==「x」|| str ==「X」)行 - 所以任何不是X的東西都會碰到else語句。

我想你想要的是將所有這些ifs轉換爲「else if」,除了第一個當然。

3

另一種方法是使用,對於這種需求存在完全switch聲明..

如:

char str = ch[0]; 

switch (str) 
{ 
    case 'm': 
    case 'M': { showFeedback("Data Memory Updated"); break; } 
    case 'p': 
    case 'P': { showFeedback("Program Memory Updated"); break; } 
    .... 
    default: { showFeedback("Invalid Command Entered"); } 
    /* default case is choosen if noone of the above is selected */ 
} 

編輯: 只是解釋你的疑問在評論,char str = ch[0]手段取第一個字符串並放在這裏

如果要查看完整的字符串做直接的比較(與 ==!=

不是adeguate:你應該使用strcmp(char* str1, char* str2)函數返回0如果兩個字符串是相等的。

+0

是的,我嘗試過,但如果我輸入「mem」這樣的東西,會因爲某種原因調用case'm' – user69514 2009-11-19 19:45:06

+0

「某些原因」是檢查一個字符串的第一個字符不會假設其他任何東西..所以「 m「或」mem「或」mwhatever「將是一樣的。這是一種*如果字符串以'm'字符開頭* – Jack 2009-11-20 14:08:13

+0

開關不適用於字符串 – 2009-11-20 14:14:50

0

有一點需要注意,你可能希望使用toupper將你的字符串轉換爲大寫,這樣你就不必用小寫猜測來對其進行操作,可能會使它更快一些。