0

我在处理这段代码时遇到了一些问题。我对 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;
    }
}

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

4

3 回答 3

4

strcmp如果两个字符串相等,则返回 0。你应该重写你的支票:

if( !strcmp(str, "add")) 
{
}
else if ( !strcmp(str, "sub")){
       return SUB;
}
于 2017-07-30T22:54:08.950 回答
2

strcmp0在两个字符串相等时返回。因此,您在switchint函数中的比较应该是:

if(!strcmp(str, "add")) { ... }

其他比较也是如此。

于 2017-07-30T22:55:31.063 回答
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
于 2017-07-30T23:03:27.367 回答