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

C语言fgets()函数如何从键盘输入?

C语言 fgets() 函数是一个强大而灵活的工具,用于从输入流中读取字符串。虽然它通常用于从文件中读取数据,但也可以用来从键盘(标准输入)获取用户输入。
 

fgets() 函数的基本语法如下:

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

参数说明:


要从键盘读取输入,我们将使用标准输入流 stdin 作为 stream 参数。下面是一个使用 fgets() 从键盘读取输入的简单示例:

#include <stdio.h>

int main() {
    char input[100];
    printf("请输入一些文本:");
    fgets(input, sizeof(input), stdin);
    printf("你输入的是:%s", input);
    return 0;
}

在这个例子中,我们创建了一个大小为 100 的字符数组来存储用户输入。fgets() 函数会读取用户输入的内容,直到遇到换行符或者达到数组大小限制(在这里是 99 个字符,因为最后一个字符用于存储字符串结束符 '\0')。
 

运行这段代码,你会看到类似下面的输出:

请输入一些文本:Hello, World!
你输入的是:Hello, World!


使用 fgets() 函数从键盘读取输入有几个重要的注意事项:

1) 保留换行符

fgets() 会保留输入中的换行符。如果你不希望保留换行符,可以在读取后手动将其移除:

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

int main() {
    char input[100];
    printf("请输入一些文本:");
    fgets(input, sizeof(input), stdin);
    
    // 移除换行符
    input[strcspn(input, "\n")] = 0;
    
    printf("你输入的是:%s", input);
    return 0;
}

2) 处理溢出

如果用户输入的字符超过了指定的缓冲区大小,fgets() 会自动截断输入,确保不会发生缓冲区溢出。然而,这可能会导致意外的数据丢失。为了处理这种情况,你可以检查输入是否被截断:

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

int main() {
    char input[10];
    printf("请输入一些文本(最多 9 个字符):");
    if (fgets(input, sizeof(input), stdin) != NULL) {
        if (input[strlen(input) - 1] != '\n') {
            int c;
            while ((c = getchar()) != '\n' && c != EOF);
            printf("警告:输入被截断\n");
        }
        input[strcspn(input, "\n")] = 0;
        printf("你输入的是:%s\n", input);
    }
    return 0;
}

在这个例子中,如果输入的最后一个字符不是换行符,说明输入可能被截断了。我们使用一个循环来清除输入缓冲区中的剩余字符,并显示一个警告消息。

3) 错误处理

fgets() 函数在成功时返回传入的指针,在失败或遇到文件结束时返回 NULL。良好的编程实践是检查返回值:

#include <stdio.h>

int main() {
    char input[100];
    printf("请输入一些文本:");
    if (fgets(input, sizeof(input), stdin) != NULL) {
        printf("你输入的是:%s", input);
    } else {
        printf("读取输入时发生错误\n");
    }
    return 0;
}

通过这些示例和注意事项,你应该能够熟练地使用 fgets() 函数从键盘读取用户输入了。记住,fgets() 是一个安全的输入函数,因为它允许你指定最大读取字符数,从而防止缓冲区溢出。在处理用户输入时,始终要考虑到各种边界情况和潜在的错误,以确保你的程序稳定可靠。


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