从fgets()输入中删除换行符

时间:2018-07-12 16:57:56

标签: c gcc printf newline fgets

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

#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)对此有所抱怨:

  

“获取”功能很危险,不应使用。

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

1 个答案:

答案 0 :(得分:1)

name[strlen(name)-1]='\0';之后添加此代码行fgets()。之所以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.