我在使用此代码时遇到了一些问题。我对switch语句和枚举类型都很陌生,所以可能会过度扩展。我设法使用它来输入switch语句,但它不断返回第一个案例。有什么想法吗?
#include <stdio.h>
#include <string.h>
enum express {ADD, SUB, AND, OR, XOR, SHL, SHR};
express m_express;
express switchint(char *str);
int main(){
unsigned int n1=0x00;
unsigned int n2=0x00;
char action[5];
printf("Enter an expression: ");
scanf("%x, %s, %x", &n1, action, &n2);
m_express=switchint(action);
unsigned int result;
switch(m_express){
case ADD:
printf("add works");
break;
case SUB:
printf("SUB works");
break;
default:
printf("Default");
break;
}
}
express switchint(char *str){
if( strcmp(str, "add")){
return ADD;
}
else if ( strcmp(str, "sub")){
return SUB;
}
else if ( strcmp(str, "and")){
return AND;
}
else if ( strcmp(str, "or")){
return OR;
}
else if ( strcmp(str, "xor")){
return XOR;
}
else if ( strcmp(str, "shl")){
return SHL;
}
else {
return SHR;
}
}
我还没有编写我需要的其余开关盒。非常感谢任何帮助解决这个问题!
答案 0 :(得分:4)
strcmp
返回0。你应该改写你的支票:
if( !strcmp(str, "add"))
{
}
else if ( !strcmp(str, "sub")){
return SUB;
}
答案 1 :(得分:2)
strcmp返回0
。因此,您在switchint
函数中的比较应为:
if(!strcmp(str, "add")) { ... }
其他比较也是如此。
答案 2 :(得分:0)
根据C标准中的功能描述(7.23.4.2 strcmp功能)
3 strcmp函数返回一个大于的整数,相等 ,或小于零,因此指向的字符串 s1 大于,等于,或小于指向的字符串 通过s2 。
所以你应该写至少像
express switchint( const char *str){
^^^^^
if( strcmp(str, "add") == 0 ){
return ADD;
}
else if ( strcmp(str, "sub") == 0 ){
return SUB;
}
// and so on