• C 风格文件输入/输出---无格式输入/输出


    C++ 标准库的 C I/O 子集实现 C 风格流输入/输出操作。  头文件提供通用文件支持并提供有窄和多字节字符输入/输出能力的函数,而 头文件提供有宽字符输入/输出能力的函数。

    无格式输入/输出

    从文件流获取字符

    1. std::fgetc,
    2. std::getc

    int fgetc( std::FILE* stream );
    int getc( std::FILE* stream );

    读取来自给定输入流的下个字符。

    参数

    stream-读取字符的来源

    返回值

    成功时为获得的字符,失败时为 EOF 。

    若文件尾条件导致失败,则另外设置 stream 上的文件尾指示器(见 std::feof() )。若某些其他错误导致失败,则设置 stream 上的错误指示器(见 std::ferror() )。

     调用示例

    1. #include <cstdio>
    2. #include <cstdlib>
    3. int main()
    4. {
    5. FILE* file = std::fopen("test.txt", "r");
    6. if (!file)
    7. {
    8. std::perror("File opening failed");
    9. return EXIT_FAILURE;
    10. }
    11. int c; // 注意:是 int 而非 char ,要求处理 EOF
    12. while ((c = std::fgetc(file)) != EOF) // 标准 C I/O 文件读取循环
    13. {
    14. std::putchar(c);
    15. }
    16. if (std::ferror(file))
    17. {
    18. std::puts("I/O error when reading");
    19. }
    20. else if (std::feof(file))
    21. {
    22. std::puts("End of file reached successfully");
    23. }
    24. std::fclose(file);
    25. return 0;
    26. }
    输出

    从文件流获取字符串

    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 所指向的数组内容是不确定的(甚至可以不是空终止的)。

    调用示例

    1. #include <iostream>
    2. #include <cstdio>
    3. #include <cstdlib>
    4. int main()
    5. {
    6. std::FILE* tmpf = std::tmpfile();
    7. std::fputs("Alan Turing\n", tmpf);
    8. std::fputs("John von Neumann\n", tmpf);
    9. std::fputs("Alonzo Church\n", tmpf);
    10. std::rewind(tmpf);
    11. char buf[8];
    12. while (std::fgets(buf, sizeof buf, tmpf) != NULL)
    13. {
    14. std::cout << '"' << buf << '"' << '\n';
    15. }
    16. return 0;
    17. }
    输出

  • 相关阅读:
    后台项目总结
    pyspark将数据多次插入表的时候报错
    面试--并发多线程基础
    展开说说:Android Fragment完全解析-卷一
    动态规划:11分割等和子集
    数据结构-树状数组
    探讨 volatile 关键字
    低代码开发之腾讯云微搭工具
    uniapp微信小程序局部刷新,无感刷新,修改哪条数据刷新哪条
    day37
  • 原文地址:https://blog.csdn.net/qq_40788199/article/details/132782147