Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 用字符串切换_C_Switch Statement_Case Statement - Fatal编程技术网

C 用字符串切换

C 用字符串切换,c,switch-statement,case-statement,C,Switch Statement,Case Statement,不知何故,我的switch语句在我的所有案例中都没有出现,但它不应该出现在一个案例中吗? (我正在使用作为参考) 没有输出,并且应用程序在之后被阻止 #include <stdio.h> #include <stdlib.h> #define BADKEY -1 #define string1 1 #define string2 2 #define string3 3 #define string4 4 char *x = "string1"; typedef st

不知何故,我的switch语句在我的所有案例中都没有出现,但它不应该出现在一个案例中吗? (我正在使用作为参考)

没有输出,并且应用程序在之后被阻止

#include <stdio.h>

#include <stdlib.h>

#define BADKEY -1
#define string1 1
#define string2 2
#define string3 3
#define string4 4
char *x = "string1";

typedef struct {char *key; int val; } t_symstruct;

static t_symstruct lookuptable[] = {
    { "string1", string1 }, { "string2", string2 }, { "string3", string3 }, { "string4", string4 }
};

#define NKEYS (sizeof(lookuptable)/sizeof(t_symstruct))

int keyfromstring(char *key) {
    int i;
    for (i=0; i < NKEYS; i++) {
        t_symstruct *sym = lookuptable + i;
        printf("before: \n");
        if (strcmp(sym->key, key) == 0) { //creates the ERROR
            printf("inside: \n");
            return sym->val;
        }
        printf("after: \n");
    }
    return BADKEY;
}

void newFunction(char *uselessVariable) {
    printf("keyfromstring(x): %i \n", keyfromstring(x));
            switch(keyfromstring(x))      {
                case string1:
                   printf("string1\n");
                   break;
            case string2:
                   printf("string2\n");
                   break;
            case string3:
                   printf("string3\n");
                   break;
            case string4:
                   printf("string4\n");
                   break;
           case BADKEY:
                printf("Case: BADKEY \n");
                break;
        }
}

int main(int argc, char** argv) {
    newFunction(line);
    return (EXIT_SUCCESS);
}
#包括
#包括
#定义坏键-1
#定义字符串1
#定义string2 2
#定义string3 3
#定义字符串4
char*x=“string1”;
typedef结构{char*key;int val;}t_symstruct;
静态t_symstruct lookuptable[]={
{“string1”,string1},{“string2”,string2},{“string3”,string3},{“string4”,string4}
};
#定义NKEYS(sizeof(lookuptable)/sizeof(t_symstruct))
int keyfromstring(字符*键){
int i;
对于(i=0;ikey,key)==0){//将创建错误
printf(“内部:\n”);
返回sym->val;
}
printf(“之后:\n”);
}
返回坏键;
}
void newFunction(char*uselessVariable){
printf(“keyfromstring(x):%i\n”,keyfromstring(x));
开关(keyfromstring(x)){
案例1:
printf(“string1\n”);
打破
案例2:
printf(“string2\n”);
打破
案例3:
printf(“string3\n”);
打破
案例4:
printf(“string4\n”);
打破
案例关键:
printf(“案例:BADKEY\n”);
打破
}
}
int main(int argc,字符**argv){
新函数(行);
返回(退出成功);
}

你不能那样做<代码>开关适用于整数(常量),而字符串不是其中任何一个。另外,你看,这个话题已经讨论过了。

  • 您的
    lookuptable[]
    在“string1”后面有一个空格,它是 与其他条目不一致。我觉得你不想要这个
  • 您的
    keyfromstring()
    正在递增
    sym
    错误(这会导致segfault)。替换为:

int-keyfromstring(char*key)
{
int i;
对于(i=0;i键,键)==0)
返回sym->val;
}
返回坏键;
}

int-keyfromstring(char*key)
{
int i;
对于(i=0;i

  • 将您的
    printf(“Case:nothing-course\n”)
    默认值中

x的值是多少?它甚至不应该用那些不匹配的括号编译。。如果没有
break
s如果它进入了一个,那么它应该会进入所有这些。在所有情况下,您都忘记了“break;”。不知道它是否有助于解决整个问题,但是您的
printf(“Case:nothing\n”)
是不可访问的代码,这就是为什么在其余案例失败时不执行它的原因。您应该将其放在
默认值的
情况下。检查
keyfromstring(x)
的返回值(将其从开关中取出)。看起来它没有返回匹配的值,并且您没有默认的大小写。不,他甚至没有使用原语!看看
t\u symstruct
和他的数组。打得好。我试图找出segfault是从哪里来的,但不认为它是增量。纠正了这些错误,并创建了一个新的程序,只使用这些代码(准确地说)。程序仍然会崩溃,但更容易看到它在第一次循环keyfromstring(它应该在那里找到结果)后崩溃。将精确的代码复制到原始问题。@Juan,您是否使用调试器查看它在哪里崩溃?因为有了这些更改,您的代码对我来说运行得很好。@AnishRam我对C有点陌生,我正在使用netbeans。使用调试器,它说我有一个SIGSEGV(分段错误),然后弹出一个错误:没有寄存器。我还得到一个警告,keyfromstrings在没有强制转换的情况下从整数生成指针。我编辑了目前正在运行的代码,通过打印的低级调试,我认为错误一定在这里“如果(strcmp(sym->key,key)==0){//创建了错误”
int keyfromstring(char *key)
{
    int i;
    for (i=0; i < NKEYS; i++) {
        t_symstruct *sym = lookuptable + i;
        if (strcmp(sym->key, key) == 0)
            return sym->val;
    }
    return BADKEY;
}
int keyfromstring(char *key)
{
    int i;
    for (i=0; i < NKEYS; i++) {
        if (strcmp(lookuptable[i].key, key) == 0)
            return lookuptable[i].val;
    }
    return BADKEY;
}