• C/C++ I/O处理


    C标准I/O函数

    putchar(c) // 将字符变量c输出到标准I/O

    c = getchar() // 将标准输入的字符赋值给变量c

    格式化输入输出:

    printf(格式控制, 输出表列);

    格式字符汇总表:

    printf格式字符汇总表

    格式字符 功能
    %a 使用科学计数法将实数按十六进制输出,阶码前为字母p(C99标准新增)
    %A 使用科学计数法将实数按十六进制输出,阶码前为字母P(C99标准新增)
    %c 输出一个字符
    %d 输出有符号十进制数
    %e 使用科学计数法输出实数,阶码前为字母e
    %E 使用科学计数法输出实数,阶码前为字母E
    %f 输出十进制实数
    %g 阶码小于-4或超过指定精度时用%e,否则使用%f格式输出
    %G 阶码小于-4或超过指定精度时用%E,否则使用%f格式输出
    %i 与%d相同,输出十进制有符号整数
    %o 输出无符号八进制整数
    %p 输出指针
    %s 输出字符串
    %u 输出无符号十进制整数
    %x 输出十六进制整数(字母为小写)
    %X 输出十六进制整数(字母为大写)
    %% 输出百分号(%)

    引自:http://hi.baidu.com/haoyuewuwei/item/e0bc02bfa097a0432bebe342

    格式化输入:

    scanf(格式控制, 地址列表)

    将标准输出的内容输出到地址列表

    C文件操作

    文件打开与关闭

    fopen(文件名, 使用文件打开方式);

    fopen若不能正常打开,则返回NULL

    fclose关闭文件

    File *file = fopen("test.c", "w");

    fclose(file);

    文件操作

    fputc(ch, fp)和ch=fgetc(fp),与标准的输出输出接近

    fread(buffer, size, count, fp);

    fwrite(buffer, size, count, fp);

    fprintf(文件指针, 格式化字符串, 输出表列);

    fscanf(文件指针, 格式化字符串, 输入表列);

    putw和getw 对整数进行操作

    fgets(str, n, fp);

    fputs(str, fp);

    文件定位:

    rewind(fp);将文件指针回复到文件开始

    fseek(文件类型指针, 位移量, 起始量); // 定位到起始量+位移量的位置,用于实现随机读取

    ftell // 获取当前位置

    文件状态:

    reof(fp)

    ferror(fp)

    clearerr(fp)

    C++标准输入输出

    cin

    cout

    cerr

    clog

    C++基本流对象istream和ostream

    关于C++输入输出流的API可参考:http://www.cplusplus.com/reference/iostream/

    fstream和stringstream都来继承于istream或者是ostream

    基本结构图如下:

    注意:

    (1).支持国际字符的支持,即支持wchar_t,在所有的流前加一个w符号,如istream变成wistream即可,其余同理可得。

    (2).对象不可复制,同时也不存储在vector中,形参和返回值不能为流类型,只能传递引用

    往流iostream中读写字符

    #include<iostream>
    #include<sstream>
    using namespace std;
    int main()
    {
        iostream os;
        string str;
        os << "aa" << endl;
        os >> str;
        cout << str << "\n";
        return 0;
    }

    iostream os 是同时具有输入和输出功能的流对象。

    os << "aa" 将字符串输入到os流中;

    os >> str 则是将 os 中存储的内容输出到字符串中;

    然后才通过控制台的输入流 显示到终端。

    文件流fstream(理解为filestream)

    #include<iostream>
    #include<fstream>
    using namespace std;
    int main()
    {
        ifstream ifs;
        ofstream ofs;
        string str;
        ifs.open("in.txt");
        ofs.open("out.txt");
        while(ifs >> str){
            cout << str << "\n";
            ofs << str << "\n";
        }
        ifs.close();
        ofs.close(); 
        return 0;
    }

    先在当前目录下新建一个in.txt和out.txt文件,并向in.txt文件中输入一些内容。

    while(ifs >> str) 循环从ifs流出输出文件内容,每次为结束符或者空字符作为一行的结束,直到文件结尾。

    ofs << str则是将str输入到ofs文件流中,保存到out.txt文件中。

    流条件状态

    状态位strm::iostate :     strm::badbit, strm::failbit, strm::eofbit

    方法

    eof(); 文件是否设置了流的eofbit,是则返回true
    fail();  
    bad();  
    good();  
    clear(); 重置所有状态位为有效位
    clear(flag); 清除状态指定状态位
    setstate(flag) 设定状态位
    rdstate() 返回当前状态位(相当于getstate?)

    尝试往标准输入流中写非法内容,输入流将发生错误中断并退出

  • 相关阅读:
    【BZOJ5416】【NOI2018】冒泡排序(动态规划)
    【BZOJ4832】抵制克苏恩(矩阵快速幂,动态规划)
    【UOJ#340】【清华集训2017】小 Y 和恐怖的奴隶主(矩阵快速幂,动态规划)
    【BZOJ3142】[HNOI2013]数列(组合计数)
    【BZOJ3925】[ZJOI2015]地震后的幻想乡(动态规划)
    【Luogu4707】重返现世(min-max容斥)
    【UOJ#422】【集训队作业2018】小Z的礼物(min-max容斥,轮廓线dp)
    【APIO2018】铁人两项(圆方树,动态规划)
    【BZOJ4005】[JLOI2015] 骗我呢(容斥,组合计数)
    【LOJ#6072】苹果树(矩阵树定理,折半搜索,容斥)
  • 原文地址:https://www.cnblogs.com/haiyupeter/p/2666518.html
Copyright © 2020-2023  润新知