【发布时间】:2012-03-05 06:41:09
【问题描述】:
#include <stdio.h>
#include <string.h>
int main(){
char *command="0";
do {
printf("[A]dd, [P]rint, [Q]uit\n");
scanf("%s", command);
while (strcmp(command, "a") != 0 && strcmp(command, "A") != 0 && strcmp(command, "p") != 0 && strcmp(command, "P") != 0){
printf("Invalid input. Please enter one of the commands listed above.\n");
scanf("%s", command);
}
if (strcmp(command, "a") == 0 || strcmp(command, "A") == 0){
printf("You selected add.\n");
}
else if (strcmp(command, "p") == 0 || strcmp(command, "P") == 0){
printf("You selected print.\n");
}
}while (strcmp(command, "q") != 0 && strcmp(command, "Q")!= 0);
return 0;
}
我希望程序从开头打印的指定命令之一接收用户的一封信。如果他们输入 q 或 Q,我希望程序退出。我花了一段时间才弄清楚如何与循环和 if 的字符串进行比较。现在当我运行程序时它崩溃了。寻找有关其崩溃原因的见解。
【问题讨论】:
-
可能有助于包含您收到的错误消息。
-
它在哪里崩溃?附加调试器时,程序崩溃时的状态是什么?实际状态是否符合您的预期状态?
-
你不能改变
command的内容:它指向一个字符串字面量。请尝试使用数组:char command[] = "0";。并确保限制使用 scanf 读取的字符串的长度:scanf("%1s") -
scanf正在尝试将 N 个字节写入command指向的地址,这是一个字符串文字(只读)。你需要分配足够的内存来存储这N个字节,或者声明一个chars的定长数组。示例:char command[255]; scanf("%254s", command);
标签: c