我有以下正常运行的代码。但是,在我添加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");
}
答案 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将您的字符串转换为大写字母,这样您就不必使用小写猜测,也可以使它更快一点。