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

C语言fgets()的应用场景(5个实例)

fgets() 函数是C语言中一个强大而灵活的输入函数,主要用于从文件或标准输入中读取字符串。fgets() 的应用场景非常广泛,从简单的用户输入到复杂的文件处理都能胜任。

1. 读取用户输入

fgets() 最常见的应用场景之一是从标准输入(通常是键盘)读取用户输入。与 scanf() 相比,fgets() 能够安全地读取包含空格的整行输入,避免缓冲区溢出的风险。

#include <stdio.h>

int main() {
    char name[50];
    printf("请输入您的姓名:");
    fgets(name, sizeof(name), stdin);
    printf("您好,%s", name);
    return 0;
}

在这个例子中,fgets() 从标准输入(stdin)读取用户输入的姓名,并将其存储在 name 数组中。它会读取整行输入,包括空格,直到遇到换行符或达到数组大小限制。

2. 文件读取

fgets() 另一个重要的应用场景是从文件中逐行读取内容,这在处理配置文件、日志文件或任何文本文件时非常有用。

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "r");
    if (file == NULL) {
        printf("无法打开文件\n");
        return 1;
    }

    char line[100];
    while (fgets(line, sizeof(line), file) != NULL) {
        printf("%s", line);
    }

    fclose(file);
    return 0;
}

这段代码打开一个名为 "example.txt" 的文件,然后使用 fgets() 逐行读取文件内容。每读取一行就将其打印出来,直到文件结束。这种方法特别适合处理大型文件,因为它每次只读取一行,不会占用过多内存。

3. 处理固定长度的输入

在某些情况下,我们需要读取固定长度的输入,fgets() 可以轻松实现这一点,因为它允许我们指定要读取的最大字符数。

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

int main() {
    char code[6];  // 5位代码 + 1位结束符
    printf("请输入5位代码:");
    fgets(code, sizeof(code), stdin);
    
    // 移除可能的换行符
    code[strcspn(code, "\n")] = 0;

    if (strlen(code) != 5) {
        printf("输入无效,请确保输入5位代码\n");
    } else {
        printf("您输入的代码是:%s\n", code);
    }
    return 0;
}

这个例子演示了如何使用 fgets() 读取固定长度的输入(在这里是5位代码)。我们还使用 strcspn() 函数来移除 fgets() 可能读取的换行符,确保代码的准确性。

4. 安全的字符串输入

fgets() 提供了一种比 gets() 更安全的字符串输入方法,它允许指定缓冲区的大小,从而防止缓冲区溢出攻击。

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

int main() {
    char password[20];
    printf("请输入密码(最多19个字符):");
    if (fgets(password, sizeof(password), stdin) != NULL) {
        password[strcspn(password, "\n")] = 0;  // 移除换行符
        printf("密码长度:%lu\n", strlen(password));
    } else {
        printf("输入错误\n");
    }
    return 0;
}

在这个安全的密码输入示例中,fgets() 确保不会读取超过缓冲区大小的输入,有效防止了缓冲区溢出。同时,我们使用 strcspn() 函数移除了可能的换行符,以获得准确的密码长度。

5. 处理多行输入

fgets() 非常适合处理多行输入,例如在创建简单的文本编辑器或记事本应用时。

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

#define MAX_LINES 5
#define MAX_LENGTH 100

int main() {
    char notes[MAX_LINES][MAX_LENGTH];
    int i;

    printf("请输入最多%d行笔记(每行最多%d个字符):\n", MAX_LINES, MAX_LENGTH - 1);

    for (i = 0; i < MAX_LINES; i++) {
        if (fgets(notes[i], MAX_LENGTH, stdin) == NULL) {
            break;
        }
        if (notes[i][0] == '\n') {
            break;
        }
        notes[i][strcspn(notes[i], "\n")] = 0;  // 移除换行符
    }

    printf("\n您的笔记:\n");
    for (int j = 0; j < i; j++) {
        printf("%d: %s\n", j + 1, notes[j]);
    }

    return 0;
}

这个例子展示了如何使用 fgets() 创建一个简单的多行笔记应用。fgets() 允许用户输入多行文本,每行都使用 fgets() 读取,确保输入不会超过预定义的限制。用户可以通过输入空行来结束输入。


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