C语言fgets()函数如何从键盘输入?
C语言 fgets() 函数是一个强大而灵活的工具,用于从输入流中读取字符串。虽然它通常用于从文件中读取数据,但也可以用来从键盘(标准输入)获取用户输入。
fgets() 函数的基本语法如下:
char *fgets(char *str, int n, FILE *stream);
参数说明:
- str 是指向用于存储读取数据的字符数组的指针;
- n 是要读取的最大字符数(包括结尾的空字符);
- stream 是指向 FILE 对象的指针,表示输入流。
要从键盘读取输入,我们将使用标准输入流 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笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。