提示用户输入后出现“分段错误(核心已转储)”

时间:2018-12-27 20:17:07

标签: c

无论大小写如何,switch语句都会导致“分段错误(核心已转储)”。

我尝试更改“命令”的数据类型,但没有其他结果。

    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");
            }
    }

预期根据相关情况打印操作。取而代之的是,无论如何,它只会打印“ Segmentation fault(core dumped)”消息。

1 个答案:

答案 0 :(得分:4)

%c格式说明符希望传递char的地址,即char *。您要传递的是char%iint再往下走也是一样。指定者使用错误的格式会调用undefined behaivor,在这种情况下,这会导致崩溃。

您需要传递相关变量的地址,以便scanf可以对其进行修改。另外,对于%c,在格式字符串中应该有一个空格,以占用输入缓冲区中剩余的所有空白。

所以你想要

scanf(" %c", &command);

并且:

scanf("%i", &temp);