• c++语言的输入输出流库


    1.c++语言标准输入输出流

    <1>控制符的用法

    #include <iostream>
    #include <iomanip>
    using namespace std;
    int main(){
        int x=30,y=300,z=1024;
        cout<<"Decimal:"<<x<<" "<<y<<" "<<z<<endl;//按十进制输出
        cout<<"Octal:"<<oct<<x<<" "<<y<<" "<<z<<endl;//按八进制输出
        cout<<"Hexademical:"<<hex<<x<<" "<<y<<" "<<z<<endl;//按十六进制输出
        cout<<setiosflags(ios::uppercase);//设置数值中字母大写输出
        cout<<"Hexademical:"<<hex<<x<<" "<<y<<" "<<z<<endl;//
        cout<<resetiosflags(ios::uppercase);//设置数值中字母小写输出
        cout<<"Hexademical:"<<hex<<x<<" "<<y<<" "<<z<<endl;//
        cout<<"Decimal:"<<dec<<x<<" "<<y<<" "<<z<<endl;//恢复按十进制输出
    
        return 0;
    }

      运行结果:

    #include <iostream>
    #include <iomanip>
    using namespace std;
    int main(){
        int a=10;
        int b=1000;
        cout<<setw(5)<<a<<endl;
        cout<<setw(2)<<b;
        return 0;
    }

    setw操作符主要用来输出预留空格数,若空间多余则向右对齐;若空间不够,按数据长度输出。

    #include <iostream>
    #include <iomanip>
    using namespace std;
    int main(){
        cout<<setfill('*')//设置填充符号为"*"
            <<setw(2)<<"OK"<<endl
            <<setw(3)<<"OK"<<endl
            <<setw(4)<<"OK"<<endl;
        cout<<setfill(' ');//恢复默认设置,填充空格
        return 0;
    }

    #include <iostream>
    #include <iomanip>
    using namespace std;
    int main(){
        double test=22.0/7;//c++语言默认的流输出数值有效位为六位
        cout<<test<<endl;
        cout<<setprecision(0)<<test<<endl//c++语言最小有效位为1位,此处取1
            <<setprecision(1)<<test<<endl
            <<setprecision(2)<<test<<endl
            <<setprecision(3)<<test<<endl
            <<setprecision(4)<<test<<endl;
        cout<<setiosflags(ios::fixed);
        cout<<setprecision(8)<<test<<endl;
        //setiosflags(ios::fixed)与setprecision(8)合用,控制小数点右边的数字个数为八个
        cout<<setprecision(6);
    
        return 0;
    }

    #include <iostream>
    #include <iomanip>
    using namespace std;
    int main(){
        double x=66,y=-8.246;
        cout<<x<<" "<<y<<endl;
        cout<<setiosflags(ios::showpoint);//设置强制显示小数点和无效0
        cout<<x<<" "<<y<<endl;
    
        return 0;
    }

    #include <iostream>
    #include <iomanip>
    using namespace std;
    int main(){
        double x=66,y=-8.246;
        cout<<x<<" "<<y<<endl;
        cout<<setiosflags(ios::showpos);//设置强制显示正号
        cout<<x<<" "<<y<<endl;
    
        return 0;
    }

    <2>.使用ios类成员函数

    #include <iostream>
    using namespace std;
    int main(){
        char str[250];
        cout<<"请输入一字符串:
    ";
        cin.getline(str,sizeof(str),',');
        cout<<"输入的字符串为:"<<str<<endl;
    
        return 0;
    }

    从键盘读取一行文本,每遇到一个逗号就结束一次输入。

       运行结果:

    2.文件输入输出流

    文件分为ASCII文件和二进制文件

     文件的打开与关闭

    ofstream、ifstream、fstream类

    #include <iostream>
    #include <fstream>
    #include <string>
    using namespace std;
    int main(){
        ofstream myf("d:\myabc.txt");
        char txt[255];
        while (1)
        {
            cin.getline(txt,255);
            if(strlen(txt)==0)
                break;
            myf<<txt<<endl;
        }
        return 0;
    }

    此程序可由用户输入任意一些字符串并按行保存到磁盘文件上。

    #include <iostream.h>
    #include <fstream.h>
    #include <string.h>
    int main(){
        ifstream myf("d:\myabc.txt",ios::nocreate);
        if(myf.fail()){
            cout<<"file not exist!"<<endl;
            return 0;
        }
        char txt[255];
        myf>>txt;
        while(!myf.eof()){
            cout<<txt<<endl;
            myf>>txt;
        }
        return 0;
    }

    该程序将上面文件内容输出到屏幕上

    先定义文件流对象,再与文件连接

    ifstream file;

    file.open("myfile.txt",ios::in);//打开文件

    file.close();//关闭文件

    <1>文件的读写

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <cstdlib>
    using namespace std;
    int main(){
        ifstream ifile;
        ofstream ofile;
        ifile.open("d:\myabc.txt");
        ofile.open("d:\213.txt");
        if(ifile.fail()||ofile.fail()){
            cerr<<"open file fail
    ";
            return EXIT_FAILURE;//EXIT_FAILURE在cstdlib库中定义
                                   //用于向操作系统报告终止不成功
        }
        char ch;
        ch=ifile.get();
        while(!ifile.eof()){
            ofile.put(ch);
            ch=ifile.get();
        }
        ifile.close();
        ofile.close();
        return 0;
    }

    文件复制

    有时,程序用户需要交互输入数据文件名,则可使用下面的程序代码:

    ifstream ifile;

    string fileName;

    cout<<"Enter the input file name:";

    cin>>fileName;

    ifile.open(fileName.c_str());

    <2>文本文件的读写

    要求:输入一个学生的姓名、学号、年龄和住址存入文本文件中,然后读出该文件的内容。

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <cstdlib>
    using namespace std;
    class student{
    public:
        char name[10];
        int num;
        int age;
        char addr[15];
        friend ostream & operator<<(ostream &out,student &s);
        friend istream & operator>>(istream &in,student &s);
    };
    ostream & operator<<(ostream &out,student &s){
        out<<s.name<<" "<<s.num<<" "<<s.age<<" "<<s.addr<<endl;
        return out;
    }
    istream & operator>>(istream &in,student &s){
        in>>s.name>>s.num>>s.age>>s.addr;
        return in;
    }
    int main(){
        ofstream ofile;
        ifstream ifile;
        ofile.open("d:\s.txt");
        student s;
        for(int i=1;i<=3;i++){
            cout<<"请输入第"<<i<<"个学生的姓名 学号 年龄 住址"<<endl;
            cin>>s;
            ofile<<s;
        }
        ofile.close();
        cout<<"
    读出文件内容"<<endl;
        ifile.open("d:\s.txt");
        ifile>>s;
        while(!ifile.eof()){
            cout<<s;
            ifile>>s;
        }
        ifile.close();
    
        return 0;
    }

    <3>二进制文件的读写

    文本文件和二进制文件最根本的区别在于进行I/O操作时对" "字符的解释方式不同。

    通过随机数产生函数rand()产生20个整数,逐个将这些数以二进制方式写入文件file.dat中,然后读出这些数,在内存中对它们进行升序排序,再将排序后的数以文本方式逐个写入file.out文件中。

    #include <iostream>
    #include <math.h>
    #include <stdlib.h>
    #include <fstream>
    #include <iomanip>
    using namespace std;
    void sort(int[],int);
    int main(){
        fstream dat,out;                                   //定义文件流对象
        int i,a[20],b[20];
        dat.open("file.dat",ios::binary|ios::out|ios::in);//为读写打开二进制文件
        if(!dat){
            cout<<("cannot open file
    ");
            exit(0);
        }
        for(i=0;i<20;i++){
            a[i]=rand();
            dat.write((char*)&a[i],sizeof(int));           //将20个数读入文件
        }
        dat.seekg(0);                                      //将文件指针移至文件头
        for(i=0;i<20;i++)
            dat.read((char*)&b[i],sizeof(int));            //读出20个数
        sort(b,20);                                        //调用排序函数
        out.open("file.out",ios::out);                     //为输出打开文本文件
        if(!out){
            cout<<"cannot open file
    ";
            exit(0);
        }
        for(i=0;i<20;i++){
            out<<b[i]<<" ";
        }
        out<<"
    ";
        for(i=0;i<20;i++){                                  //将排序后数据写入文本文件
            cout<<setw(10)<<b[i];
            if((i+1)%5==0)
                cout<<endl;
        }
        out.close();                                         //文本文件
        dat.close();
        return 0;
    
    }
    void sort(int x[],int m){                                 //排序函数
        int i,j,k,t;
        for(i=0;i<m-1;i++){
            k=i;
            for(j=i+1;j<m;j++)
                if(x[j]<x[k]) k=j;
                if(k!=i){
                    t=x[i];x[i]=x[k];x[k]=t;
                }
        }
    }

    运行结果:

     <4>文件的随机访问

    #include <fstream>
    #include <iostream>
    using namespace std;
    int main(){
        fstream f("DATA",ios::in|ios::out|ios::binary);
        int i;
        for(i=0;i<20;i++)//先向文件中写20个二进制位表示的整数,无格式
            f.write((char*)&i,sizeof(int));
        streampos pos=f.tellp();//记录下当前的写指针
        for(i=20;i<40;i++)//再向文件中写20个二进制位表示的整数,无格式
            f.write((char*)&i,sizeof(int));
        f.seekg(pos);//将读指针定位在pos所指的位置
        f.read((char*)&i,sizeof(int));
        cout<<"the data stored is"<<i<<endl;
        f.seekp(0,ios::beg);//移到文件开始
        for(i=100;i<140;i++)//重写文件中的内容
            f.write((char*)&i,sizeof(int));
        f.seekg(pos);
        f.read((char*)&i,sizeof(int));//将读指针定位在pos所指的位置
        cout<<"the data stored is"<<i<<endl;
        return 0;
    }

    运行结果:

      

  • 相关阅读:
    webpack4+vue 打包 就是没效果?求解!!!
    Vue.js——6.创建组件
    Vue.js——5.生命周期
    Vue.js——4.指令 笔记
    Vue.js——3.增删改查
    Vue.js——2.第一个Vue程序
    Vue.js——1.初识Vue
    Codeforces 1285D Dr. Evil Underscores
    Codeforces 437B The Child and Set
    ZhongHaoxi P105-3 洗衣
  • 原文地址:https://www.cnblogs.com/liujunming/p/4575647.html
Copyright © 2020-2023  润新知