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

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

无格式输入/输出

从文件流获取字符

std::fgetc, 
std::getc

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

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

参数

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;
}

输出

猜你喜欢

转载自blog.csdn.net/qq_40788199/article/details/132782147