无论大小写如何,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)”消息。
答案 0 :(得分:4)
%c
格式说明符希望传递char
的地址,即char *
。您要传递的是char
。 %i
和int
再往下走也是一样。指定者使用错误的格式会调用undefined behaivor,在这种情况下,这会导致崩溃。
您需要传递相关变量的地址,以便scanf
可以对其进行修改。另外,对于%c
,在格式字符串中应该有一个空格,以占用输入缓冲区中剩余的所有空白。
所以你想要
scanf(" %c", &command);
并且:
scanf("%i", &temp);