C 获得;分段故障(堆芯倾倒)“;提示用户输入后

C 获得;分段故障(堆芯倾倒)“;提示用户输入后,c,C,Switch语句会导致“分段故障(堆芯转储)”,而不管情况如何 我尝试更改“command”的数据类型,但没有得到任何其他结果 char command; int temp; while(1) { printf("Enter command ('d'/'m'/'s'/'r'): "); scanf("%c", command); printf("\n"); switch(c

Switch语句会导致“分段故障(堆芯转储)”,而不管情况如何

我尝试更改“command”的数据类型,但没有得到任何其他结果

    char command;
    int temp;

    while(1) {
            printf("Enter command ('d'/'m'/'s'/'r'): ");
            scanf("%c", command);
            printf("\n");

            switch(command) {
                    case 'd' :
                            printf("display which employee (0-19)?\n");
                            scanf("%i", temp);
                            //display(temp);
                            printf("displayed");
                            break;
                    case 'm' :
                            printf("modify which employee (0-19)?\n");
                            scanf("%i", temp);
                            //modify(temp);
                            printf("modified");
                            break;
                    case 's' :
                            //save();
                            printf("saved");
                            break;
                    case 'r' :
                            //retrieve();
                            printf("retrieved");
                            break;
                    default :
                            printf("Command not recognized\n");
            }
    }

希望根据相关案例打印操作。相反,它只打印“分段错误(内核转储)”消息,而不考虑。

格式说明符希望传入
字符的地址,即
字符*
。您正在传入一个
char
。进一步向下的
%i
int
也是如此。使用错误的格式说明符调用,这在本例中表现为崩溃

您需要传递相关变量的地址,以便
scanf
可以修改它们。另外,对于
%c
,格式字符串前面应该有一个空格,以便使用输入缓冲区中剩余的任何空格

所以你想要:

scanf(" %c", &command);
以及:


%c
格式说明符要求传入
字符的地址,即
字符*
。您正在传入一个
char
。进一步向下的
%i
int
也是如此。使用错误的格式说明符调用,这在本例中表现为崩溃

您需要传递相关变量的地址,以便
scanf
可以修改它们。另外,对于
%c
,格式字符串前面应该有一个空格,以便使用输入缓冲区中剩余的任何空格

所以你想要:

scanf(" %c", &command);
以及:

scanf(“%i”,温度)-->
scanf(“%i”&temp)
由于
temp
是一个
int
变量,因此需要提供
&
来存储用户输入。还要仔细阅读编译器警告并解决它们,不要忽略它们。
scanf(“%i”,temp)-->
scanf(“%i”&temp)
由于
temp
是一个
int
变量,因此需要提供
&
来存储用户输入。还要仔细阅读编译器警告并解决它们,不要忽略它们。