C语言 使用 fgets() 读取字符换行符问题

C语言中,使用 fgets() 读取字符串时,通常会在字符串的末尾包含一个换行符(\n),由于 fgets() 会保留输入中的换行符(除非输入的长度超过缓冲区大小)。则通常需要手动移除这个换行符。

1、fgets() 的使用

fgets() 是 C 语言中用于从指定文件流读取一行字符的函数。它通常用于从文件或标准输入(例如键盘)读取字符串。

1)从标准输入读取并输出

#include <stdio.h>

int main() {
    char buffer[100];  // 用于存储输入字符串

    printf("请输入一行文本:\n");
    
    // 从标准输入读取一行,最多读取99个字符,留1个字符给终止符 '\0'
    if (fgets(buffer, sizeof(buffer), stdin) != NULL) {
        printf("你输入的文本是:%s", buffer);
    } else {
        printf("读取输入失败!\n");
    }

    return 0;
}

2)从文件中读取一行

#include <stdio.h>

int main() {
    FILE *file;
    char buffer[100];

    // 打开文件用于读取
    file = fopen("example.txt", "r");
    if (file == NULL) {
        printf("无法打开文件!\n");
        return 1;
    }

    // 从文件中读取一行并输出
    if (fgets(buffer, sizeof(buffer), file) != NULL) {
        printf("文件中第一行内容是:%s", buffer);
    } else {
        printf("读取文件失败!\n");
    }

    // 关闭文件
    fclose(file);

    return 0;
}

2、解决问题换行符问题

要移除 fgets() 读取的字符串末尾的换行符,可以检查字符串的最后一个字符是否是 \n,如果是,就将其替换为字符串结束符 \0

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

int main() {
    char buffer[100];  // 定义一个存储输入字符串的缓冲区

    // 使用 fgets 读取输入
    printf("请输入一行文本:");
    if (fgets(buffer, sizeof(buffer), stdin) != NULL) {
        // 查找并移除换行符
        size_t len = strlen(buffer);
        if (len > 0 && buffer[len - 1] == '\n') {
            buffer[len - 1] = '\0';  // 将换行符替换为字符串结束符
        }
        printf("你输入的内容是:%s\n", buffer);  // 打印移除了换行符后的字符串
    }

    return 0;
}

注意:如果输入的字符数超过缓冲区的大小,fgets() 读取的内容将不包含换行符,这时无需移除换行符。上面的代码已经考虑到了这种情况。

3、fputs()的使用

C 语言中,fputs() 是用于输出字符串的函数,它不会自动添加换行符,如要输出的内容换行,需要手动添加 \n

#include <stdio.h>

int main() {
    char input[100];

    printf("请输入一行文本:");
    if (fgets(input, sizeof(input), stdin)) {
        // 使用 fputs 输出输入的字符串
        fputs("您输入的内容为:", stdout);
        fputs(input, stdout);

        // 如果想要确保输出结束后换行,可以手动添加换行符
        if (input[strlen(input) - 1] != '\n') {
            fputs("\n", stdout); // 手动加换行符
        }
    }

    return 0;
}

使用 fputs() 函数将字符串写入文件:

#include <stdio.h>

int main() {
    // 定义要写入的字符串
    char *str = "www.cjavapy.com";

    // 以追加的方式打开文件,如果文件不存在则创建
    FILE *fp = fopen("D:\\demo.txt", "at+");

    // 检查文件是否成功打开
    if (fp == NULL) {
        perror("文件打开失败");
        return 1;
    }

    // 使用 fputs() 将字符串写入文件
    if (fputs(str, fp) == EOF) {
        perror("写入失败");
        fclose(fp); // 关闭文件
        return 1;
    }

    // 成功写入后提示信息
    printf("字符串已写入文件。\n");

    // 关闭文件
    fclose(fp);

    return 0;
}

推荐阅读
cjavapy编程之路首页