【问题标题】:How to print different strings depending on the input?如何根据输入打印不同的字符串?
【发布时间】:2020-10-01 20:40:17
【问题描述】:

如果输入姓名 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;
}

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

【问题讨论】:

  • name 应该是 char 的数组,而不仅仅是单个 char
  • 另外,C 被编译。它不是一种脚本语言。
  • 你在哪里学会使用gets()?永远不要使用它。
  • 在调试器中单步执行可能会暴露问题。还可以尝试打开所有编译器警告(例如-Wall),因为这段代码非常不正确。 C 会告诉你,但只有在被问到时才会告诉你。

标签: c io string-comparison


【解决方案1】:

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

//...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    相关资源
    最近更新 更多