我有这个应该是聊天模拟器的程序,它现在应该做的唯一事情就是回复你好!'当用户键入“Hello'。
时#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
int main()
{
printf("Chat simulator!\n");
do {
char x;
printf("[User1] ");
scanf("%s",&x);
if (strcmp (x,"Hello") == 0)
{
Sleep(1500);
printf("[User2] Hello!\n");
}
else {}
} while(1);
}
我知道strcmp
仅适用于const char *
,而不是char
,这就是问题,但我无法找到任何其他解决方案为此,我需要在char x
中使用scanf
,因此它不能成为const char *
。
也有可能我是{m}使用strcmp
错误。
代码:阻止警告:
passing argument 1 of 'strcmp' makes pointer from integer without a cast*
expected 'const char *' but argument is of type 'char'*
修改
所以我将char
更改为char[16]
,因为@ robin.koch告诉我,并且它全部正常工作。谢谢!
答案 0 :(得分:4)
您无法将字符串与char
与strcmp
进行比较,但手动操作很容易:
int samechar(const char *str, char c) {
return *str == c && (c == '\0' || str[1] == '\0');
}
然而,上述功能不是您需要的问题:
scanf()
需要指向转化说明符char
的{{1}}数组的指针。%s
只会读一个单词。您可能想要读取用户的完整行。请使用scanf()
。以下是修改后的版本:
fgets()
答案 1 :(得分:0)
正如其他人所指出的那样,当字符仅用于存储一个字符时,您尝试使用char
将字符串存储到scanf
变量中。您应该使用char *
或char[]
变量来保存字符串。所以改变
char x;
printf("[User1] ");
scanf("%s",&x);
//...rest of your code...
到
char * x = malloc(sizeof(char) * 10); //can hold up to ten characters
printf("[User1] ");
scanf("%s",x);
//...rest of your code...
free(x);
请注意,如果您只想使用char数组而不是指针,则可以使用char x[10];
替换上面的第一行并删除free(x);