如何接受C中的Char输入?

时间:2014-03-11 22:35:11

标签: c

所以我尝试编译我得到一个警告:指针和整数之间的比较[默认启用]错误,我做错了什么??

int main(int argc, char *argv[])
{
char x;

printf("What would you like to do today?\n");
scanf("%s", &x);

if (x == "slm") {
    printf("You SLAM a Faygo!");

} else if(x == "kik") {
    printf("You KICK the Wicked Elixir!"); 
}

return 0;
}

3 个答案:

答案 0 :(得分:7)

三个问题:

  1. 您需要读取字符串,而不是char(考虑到缓冲区溢出),例如:

    char x[128];
    
    scanf ("%128s", x);
    
  2. 您无法将字符串与==进行比较:您需要使用strcmp:

    #include <string.h>
    
    ...
    
    if (0 == strcmp (x, "slm")) { ... }
    
  3. 您应该检查scanf的成功/失败返回码:

    if (1 != scanf (...)) {
        perror ("scanf");
        return EXIT_FAILURE;
    }
    
  4. (EXIT_FAILURE在stdlib.h中定义。)

答案 1 :(得分:3)

x是一个字母。和&#34; slm&#34;是一个字符串 - char *

您可能想要更改它:

char *x;

但现在你需要分配内存。例如:

char *x = (char *)malloc(MAX_LENGTH*sizeof(char));

此外,fvu是正确的 - 使用if(!strcmp(x,"slm"))代替if(x ==slm)strcmp在字符串相同时返回0)

答案 2 :(得分:0)

  • 你混淆了char(这是单个字符)和char *(这是C处理字符串的方式)
  • 你无法按照你想要的方式
  • 进行有意义的==

你需要:

  • 将char x更改为char * x或char x [1000];
  • 如果使用char *,则需要使用malloc或类似方法来分配空间 为它
  • 在任何一种情况下,对于生产代码,您都会想要使用 限制可以读取多少数据的东西(例如fgets,但是 没有得到)。
  • 您将要使用strcmp,如果两者返回0 字符串是相等的,如果不是,则为非零。