我正在尝试编写C程序以在OS X El Capitan上启动特定功能。 代码如下所示:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char mainchoice;
printf(">>> ");
scanf("%s", &mainchoice);
if (strcmp(&mainchoice, "start ftp") == 0) {
system("ftp");
}
else if (strcmp(&mainchoice, "start say") == 0) {
system("say hello");
}
else {
system("say Error")
}
}
这只是一个示例代码。
当我运行它时,它总是通过say命令说错误。我做错了什么?
答案 0 :(得分:1)
关注这里: -
char mainchoice; //declared as a char
scanf("%s", &mainchoice); //using the %s placeholder which is for string
//for character it is %c
获取代码背后的逻辑是要输入String而不是字符。
制作一个这样的字符数组: -
char mainchoice[20]; //this can hold your string, one character at one index each of the array
因为,你在字符串比较中使用多字(“开始说”)
(strcmp(&mainchoice, "start say") == 0)
scanf不适用于多个单词。只要提供空格,制表符,换行符,scanf就会停止从键盘读取。
要解决该问题,请使用fgets。这是阅读多个单词甚至整个句子的最佳方式。 永远不要使用gets()!它容易受到缓冲区溢出的影响!
fgets(mainchoice, 20, stdin);
答案 1 :(得分:0)
您将mainchoice声明为字符而不是字符串。
使用char mainchoice[10];
创建一个字符串。
并将scanf("%s",&mainchoice)
替换为fgets(mainchoice, 10, stdin);
size是10,因为你将它与长度为9的字符串进行比较,所以(9 + 1 null = 10)10就够了。