首页 > 编程笔记 > C语言笔记

C语言fgets()会读取换行符吗?

在C语言中,fgets() 函数是一个常用的输入函数,用于从文件或标准输入中读取字符串。许多初学者经常对 fgets() 函数的行为感到困惑,特别是关于它是否会读取换行符。让我们深入探讨这个问题,并通过示例来理解 fgets() 的工作原理。
 

fgets() 函数的原型如下:

char *fgets(char *str, int n, FILE *stream);

这个函数会从指定的流(stream)中读取最多 n-1 个字符,或者直到遇到换行符为止,将读取的内容存储到 str 指向的字符数组中。重要的是,fgets() 确实会读取换行符(如果遇到的话),并将其作为字符串的一部分存储。


让我们通过一个简单的例子来说明这一点:

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

int main() {
    char buffer[100];
    printf("请输入一行文本:\n");
    fgets(buffer, sizeof(buffer), stdin);
    
    printf("你输入的是:%s", buffer);
    printf("字符串长度:%lu\n", strlen(buffer));
    
    // 打印每个字符的 ASCII 值
    printf("字符的 ASCII 值:\n");
    for (int i = 0; buffer[i] != '\0'; i++) {
        printf("%d ", buffer[i]);
    }
    printf("\n");
    
    return 0;
}

当我们运行这个程序并输入一些文本时,会得到类似下面的输出:

请输入一行文本:
Hello, World!
你输入的是:Hello, World!
字符串长度:14
字符的 ASCII 值:
72 101 108 108 111 44 32 87 111 114 108 100 33 10

从这个输出中,我们可以观察到几个重要的点:


理解 fgets() 会读取换行符这一特性很重要,因为它可能会影响我们的程序逻辑。例如,如果我们想要去除输入末尾的换行符,可以这样做:

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

int main() {
    char buffer[100];
    printf("请输入一行文本:\n");
    fgets(buffer, sizeof(buffer), stdin);
    
    // 去除末尾的换行符
    buffer[strcspn(buffer, "\n")] = '\0';
    
    printf("处理后的字符串:%s\n", buffer);
    printf("字符串长度:%lu\n", strlen(buffer));
    
    return 0;
}

这个程序的输出将会是:

请输入一行文本:
Hello, World!
处理后的字符串:Hello, World!
字符串长度:13

在这个修改后的版本中,我们使用 strcspn() 函数找到换行符的位置,并将其替换为字符串结束符 '\0',有效地删除了换行符。


了解 fgets() 的这一行为对于处理用户输入非常重要,它允许我们捕获整行输入,包括可能包含空格的字符串,同时也给了我们处理或保留换行符的灵活性。在开发需要精确控制输入处理的程序时,这种理解尤为重要。
 

总之,fgets() 函数确实会读取换行符,并将其作为输入字符串的一部分。


声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。