C++ 标准库的 C I/O 子集实现 C 风格流输入/输出操作。头文件提供通用文件支持并提供有窄和多字节字符输入/输出能力的函数,而 头文件提供有宽字符输入/输出能力的函数。
- std::fgetc,
- std::getc
读取来自给定输入流的下个字符。
| stream | - | 读取字符的来源 |
成功时为获得的字符,失败时为 EOF 。
若文件尾条件导致失败,则另外设置 stream 上的文件尾指示器(见 std::feof() )。若某些其他错误导致失败,则设置 stream 上的错误指示器(见 std::ferror() )。
- #include <cstdio>
- #include <cstdlib>
-
- int main()
- {
- FILE* file = std::fopen("test.txt", "r");
- if (!file)
- {
- std::perror("File opening failed");
- return EXIT_FAILURE;
- }
-
- int c; // 注意:是 int 而非 char ,要求处理 EOF
- while ((c = std::fgetc(file)) != EOF) // 标准 C I/O 文件读取循环
- {
- std::putchar(c);
- }
-
- if (std::ferror(file))
- {
- std::puts("I/O error when reading");
- }
- else if (std::feof(file))
- {
- std::puts("End of file reached successfully");
- }
-
- std::fclose(file);
- return 0;
- }

std::fgets
| char* fgets( char* str, int count, std::FILE* stream ); |
从给定文件流读取最多 count - 1 个字符并将它们存储于 str 所指向的字符数组。若文件尾出现或发现换行符则终止分析,后一情况下 str 将包含一个换行符。若读入字节且无错误发生,则紧随写入到 str 的最后一个字符后写入空字符。
若 count 小于 1 则行为未定义。亦不指定是否写入空字符,若 count==1 。
| str | - | 指向 char 数组元素的指针 |
| count | - | 要写入的最大字符数(典型地为 str 的长度) |
| stream | - | 读取数据来源的文件流 |
成功时为 str ,失败时为空指针。
若遇到文件尾条件导致了失败,则设置 stream 上的文件尾指示器(见 std::feof() )。这仅若它导致未读取字符才是失败,该情况下返回空指针且不改变 str 所指向数组的内容(即不以空字符覆写首字节)。
若其他错误条件导致了失败,则设置 stream上的错误指示器(见 std::ferror() )。 str 所指向的数组内容是不确定的(甚至可以不是空终止的)。
- #include <iostream>
- #include <cstdio>
- #include <cstdlib>
-
- int main()
- {
- std::FILE* tmpf = std::tmpfile();
- std::fputs("Alan Turing\n", tmpf);
- std::fputs("John von Neumann\n", tmpf);
- std::fputs("Alonzo Church\n", tmpf);
-
- std::rewind(tmpf);
- char buf[8];
- while (std::fgets(buf, sizeof buf, tmpf) != NULL)
- {
- std::cout << '"' << buf << '"' << '\n';
- }
- return 0;
- }
