比较变量和字符串

时间:2016-08-27 19:18:32

标签: c

我正在尝试编写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命令说错误。我做错了什么?

2 个答案:

答案 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就够了。