fgets
是 C 语言中的一个函数,用于从指定的流中读取一行文本。在 C++ 中,虽然 std::cin
是处理标准输入的常用方式,但 fgets
仍然可以用于从 stdin
读取输入。以下是如何使用 fgets
从 C++ 中的 stdin
读取多个输入的示例:
fgets
函数的原型如下:
char *fgets(char *str, int n, FILE *stream);
str
是指向存储输入字符串的字符数组的指针。n
是要读取的最大字符数(包括终止的空字符 \0
)。stream
是指向 FILE
对象的指针,通常是 stdin
。以下是一个简单的示例,展示如何使用 fgets
从 stdin
读取多个输入:
#include <iostream>
#include <cstdio>
int main() {
const int MAX_LENGTH = 100;
char input[MAX_LENGTH];
std::cout << "请输入第一行文本: ";
if (fgets(input, MAX_LENGTH, stdin)) {
std::cout << "你输入的第一行文本是: " << input;
} else {
std::cerr << "读取输入时发生错误。" << std::endl;
}
std::cout << "请输入第二行文本: ";
if (fgets(input, MAX_LENGTH, stdin)) {
std::cout << "你输入的第二行文本是: " << input;
} else {
std::cerr << "读取输入时发生错误。" << std::endl;
}
return 0;
}
fgets
提供了一种直接的方式来读取一行文本。n
参数,可以控制读取的最大字符数,避免缓冲区溢出。fgets
是一个 C 标准库函数,适用于所有支持 C 标准的编程环境。fgets
会将换行符也读入到字符串中。如果不需要换行符,可以在读取后进行处理:
#include <cstring>
// 假设 input 已经通过 fgets 读取了数据
char *newline = strchr(input, '\n');
if (newline) {
*newline = '\0'; // 替换换行符为空字符
}
如果 fgets
返回 NULL
,可能是因为读取到文件末尾或发生了错误。可以通过检查 feof(stdin)
和 ferror(stdin)
来确定具体原因:
if (fgets(input, MAX_LENGTH, stdin) == NULL) {
if (feof(stdin)) {
std::cerr << "到达文件末尾。" << std::endl;
} else if (ferror(stdin)) {
std::cerr << "读取输入时发生错误。" << std::endl;
}
}
通过这些方法,可以有效地使用 fgets
从 stdin
读取多个输入,并处理可能遇到的问题。
领取专属 10元无门槛券
手把手带您无忧上云