简体   繁体   中英

C++ String manipulation - if stament

I have the following code that works correctly. However after I add an else statement anything always evaluates to 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");
        }

All the previous evaluates correctly based on what the input is. ie If I enter "m" it calls the showeFeedback("Data Memory Updated") on so on, but if I add the following else statement, I always get "Invalid Command Entered" no matter what I enter.

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

All of those are separate if-statements. The else you added only goes with the last one. Change all but the first if to else if and it should work like you expect.

You need to use else if for everything except the first one.

So the simple change to your existing code:

        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");
        }

Another approach would be to use the switch statement that exists exactly for this kind of needs..

eg:

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 */
}

EDIT: just to explain your doubt in the comment, char str = ch[0] means take first character of the string and put it here .

if you want to check the complete string doing direct comparisons (with == or != ) is not adeguate: you should use strcmp(char* str1, char* str2) function that returns 0 if the two strings are equal.

Because when you add the else, its against the if(str=="x" || str=="X") line - so anything that is not an X will hit the else statement.

I think what you want are to convert all those ifs to "else if", except the first one of course.

需要注意的一件事,您可能希望使用toupper将字符串转换为大写,这样就不必将其与小写猜测进行“或”运算,这可能会使它更快一些。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM