首页 > 解决方案 > 如何根据输入打印不同的字符串?

问题描述

如果输入了EmilyJack的名字,我希望显示一条消息,而另一个输入则显示不同的消息。

我的代码:

#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;
}

此代码将编译但不会输出任何内容。

标签: ciostring-comparison

解决方案


第一个问题是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

//...

推荐阅读