【问题标题】:Remove newline from fgets() input [duplicate]从 fgets() 输入中删除换行符
【发布时间】:2018-12-21 00:00:31
【问题描述】:

我正在尝试编写一个非常简单的程序,它要求您输入您的姓名,然后它会向您打招呼。代码如下:

#include <stdio.h>

int main() {
    char name[30];
    printf("Write your name: ");
    fgets(name, 30, stdin);
    printf("Hello, %s. Nice to meet you.\n", name);
    return 0;
}

但是当我编译并运行程序时,会显示以下输出(输入名称John Doe):

Hello, John Doe
. Nice to meet you.

起初我打算使用gets(),它显然不会打印换行符,但编译器 (GCC) 抱怨它:

`gets' 功能很危险,不应使用。

如何从使用fgets() 输入的字符串中删除换行符?

【问题讨论】:

标签: c gcc printf newline fgets


【解决方案1】:

fgets()之后添加这行代码name[strlen(name)-1]='\0';newline 发生是因为fgets() 中的终端符号\n 而不是\0。所以我们需要它来实现\0

修改后的代码:-

#include <stdio.h>
#include <string.h>

int main() {
    char name[30];
    printf("Write your name: ");
    fgets(name, 30, stdin);
    name[strlen(name)-1]='\0';                        // making '\n' '\0'
    printf("Hello, %s. Nice to meet you.\n", name);
    return 0;
}

输出:-

Write your name: world
Hello, world. Nice to meet you.

【讨论】:

  • 这可行但有风险:如果(无论出于何种原因)字符串 not 以换行符结尾怎么办?
  • 这需要线性时间才能找到字符串的结尾。
猜你喜欢
  • 2022-01-05
相关资源
最近更新 更多