我的switch语句总是返回第一个案例?

时间:2017-07-30 22:51:37

标签: c switch-statement enumerated

我在使用此代码时遇到了一些问题。我对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;
    }
}

我还没有编写我需要的其余开关盒。非常感谢任何帮助解决这个问题!

3 个答案:

答案 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