c - 如何根据输入打印不同的字符串?
问题描述
如果输入了Emily或Jack的名字,我希望显示一条消息,而另一个输入则显示不同的消息。
我的代码:
#include <stdio.h>
#include <string.h>
int main()
{
char name;
printf("What is your name?");
gets(name);
if ((strcmp(name,"Emily") == 0) || (strcmp(name,"Jack") == 0))
{
printf("Hello %s\n", name);
} else
{
printf("Welcome Stranger!\n");
}
return 0;
}
此代码将编译但不会输出任何内容。
解决方案
第一个问题是name
可以存储一个char
,要存储一个字符串,你需要一个char
数组。
第二个问题,不是导致错误行为,但同样重要,是使用gets
. 此函数在C99中已弃用,并从C11的国际标准中删除,并且有充分的理由,它非常危险,因为它很容易溢出目标缓冲区,它无法控制输入流的长度。fgets
经常使用。
char name[256]; //array store the name
//...
fgets(name, sizeof name, stdin); //safe, can't overflow the buffer, input size is limited
name[strcspn(name, "\n")] = '\0'; //fgets parses the newline character, it must be removed
//...