开发者

C++ String manipulation - if stament

开发者 https://www.devze.com 2022-12-12 13:27 出处:网络
I have the following code that works correctly. However after I add an else statement anything always evaluates to else

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. i.e 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.


One thing to note, you may want to use toupper to convert your string to uppercase so that you don't have to OR it with lowercase guesses, might make it a little faster.

0

精彩评论

暂无评论...
验证码 换一张
取 消