C ++字符串操作 - if语句

时间:2009-11-19 18:36:19

标签: c++ string if-statement

我有以下正常运行的代码。但是,在我添加else语句之后,任何事情总是会计算到else

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(“Data Memory Updated”),但是如果我添加以下else语句,无论我输入什么,我总是得到“Invalid Command Entered”。

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

5 个答案:

答案 0 :(得分:9)

所有这些都是单独的if语句。您添加的其他内容仅适用于最后一个。将所有内容更改为else if以外的所有内容,它应该像您期望的那样工作。

答案 1 :(得分: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");
        }

答案 2 :(得分: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]意味着获取字符串的第一个字符并将其放在

如果你想检查完整的字符串进行直接比较(==!=)是不合适的:你应该使用strcmp(char* str1, char* str2)函数返回0如果两个字符串相等。

答案 3 :(得分:1)

因为当你添加else时,它会反对if(str ==“x”|| str ==“X”)行 - 所以任何不是X的东西都会触及else语句。

我认为您想要的是将所有ifs转换为“else if”,当然除了第一个。

答案 4 :(得分:0)

有一点需要注意,您可能希望使用toupper将您的字符串转换为大写字母,这样您就不必使用小写猜测,也可以使它更快一点。