小工具知识网

当前位置: 首页 > 行业知识 > 【C++】万字详解IO流(输入输出流+文件流+字符串流)

行业知识

【C++】万字详解IO流(输入输出流+文件流+字符串流)

2026-10-28 10:53:43 来源:互联网转载

文章目录

  • 一、标准输入输出流
    • 1.1提取符>>(赋值给)与插入符 a
    • 理解ifstream(读) >> a
    • 例子
    • 1.2get系列函数
      • get与getline函数细小但又重要的区别
      • 1.3获取状态信息函数(处理流错误)
        • 例子:检测输入输出状态
        • 例子:确保一个整型数给变量a
        • 二、文件输入输出流
          • 2.1文件打开
          • 2.2关闭文件
          • 2.3文本文件的读写
            • 例子:写文本文件,把学生信息保存到文件当中
            • 例子:读文本文件并显示在屏幕上
            • 2.4二进制文件
              • 例子:写二进制文件
              • 例子:读二进制文件
              • 二进制文件和普通文件的区别
              • 2.5寻找输入输出流缓冲(这样就可以不用给缓冲区流向数据了)
              • 2.6定位输入输出流
                • 例子:先写文件再读文件(用rdbuf读)
                • 三、字符串输入输出流(理解成动态字符串)
                  • 3.1例子:反解字符串给各变量赋值
                  • 3.2例子:合并不同类型的数据到字符串
                  • 3.3例子:字符切割(类3.1)
                  • 3.4例子:使用stringstream进行类型转换
                  • 3.5综合例子:读入每个学生的各科成绩,并显示学生各科成绩及总成绩
                    • 方法二:利用文件流+重载输入输出流
                    • 四、总结
                      • 答案一:哪些流
                      • 答案二:stringstream与其他的区别
                      • 答案三:stringstream初始化
                      • 答案四:文件流关联文件
                      • 答案五:文件流指定文件打开方式
                      • 答案六:控制流的游标位置
                      • 答案七:流的标志位及如何检测
                      • 答案八:文件和字符串流读写数据
                      • 答案九:read和write操作
                      • 答案十:stringstream的类型转换
                      • 答案十一(对我来说很重要,因为之前用string的时候没有传大小)
                      • 答案十二:class私有怎么重载
                      • ���案十三:如何访问流的缓冲区

                        一、标准输入输出流

                        流的概念:若干个字节组成的一个字节序列,代表信息从源到目的的流动

                        头文件 iostream

                        从标准输入读取流 cin >> //把空格、换行作为分隔符(不读空格)

                        从标准输出写入流 cout

                        h31.1提取符>(赋值给)与插入符> 这个符号是插入符呢?这个不应该是写是插入吗?

                        请听我娓娓道来:我们将cin理解成写 是从用户的角度理解 因为我们一写 cin 我们就会调用控制台console从黑框中写入东西 所以我们觉得 >> 这个是写 但是cin >> a 的本质是:(注:cin在这里先当作ifstream )我们先从黑框中写入,黑框的数据拷贝给了ifsream流文件:test.txt 接着我们把 test.txt 的文件内容 >> 内存变量,即流向了变量a。总的来说:对于用户调用consolea来说:是写;但是对于文件test.txt流向内存变量:是读(是test.txt赋值给变量a),我们考虑的正是后者!(图片里面的instream写错了,应该是ifstream)

                        理解cin >> a

                        粗暴点讲:我们的cin就是调用键盘然后写入,但是我们的操作符 >> 这个可是提取,提取我们键盘输入的信息

                        cin >> a :1.调用键盘 2.赋值

                        理解ifstream(读) >> a

                        把ifstream>>a理解成一个过程 而且这个过程正是cin>>a的第二个过程,我们探讨的数据的流向和键盘与显示器无关,而是探讨数据内存之间的流向

                        总的来说:

                        • 运算符i,是把键盘输入的信息赋值给i
                        • 例子

                          //应用 class Stu{string name;int score;public:Stu(string n="",int s=0){name=n,score=s;}  //构造//小羊谨记:写这俩个运算符重载的时候 一定得在返回值和俩个参数都加上引用!friend istream& operator>>(istream& in,Stu& s); //声名友元函数  要加关键字friend   friend使得外部函数可以访问friend ostream& operator(istream& in,Stu& s){  in >> s.name >> s.score;return in;}ostream& operator  out Stu s;cins;    //但是cin不理解怎么读取Stu型,所以要对cin进行重载(详情见上面)cout    unsigned char buf1[5];    cout     unsigned char buf1[10];    unsigned char buf2[10];    cin.getline((char*)buf2, 10);     cout     unsigned char buf1[10];    unsigned char buf2[10];        cin.get((char*)buf1, 10);     cout int a;ifstream file("D:\vs code_code\Teacher_DiXW\a.txt");file  a;coutcoutcoutchar BUFF[60];int a;while(1){cina;if(cin.fail()){coutcout    ofstream out("D:\vs code_code\Teacher_DiXW\lzy.txt");    if (out)    {        out     char buffer[256];    ifstream in("D:\vs code_code\Teacher_DiXW\lzy.txt");    if (in)    {        while(!in.eof())//确保访问到文件末尾        {            in.getline(buffer,100);//in  buffer ;            cout     char strName[20];    int nGrade;};int main(){    ofstream out;    out.open("D:\vs code_code\Teacher_DiXW\lzy.txt");    STUDENT st1={"张三",90};    STUDENT st2={"李四",80};    out     char szBuf[80];    ifstream in("D:\vs code_code\Teacher_DiXW\lzy.txt");    if(in)    {        while(in.getline(szBuf,80))        {            coutstruct Worker w[3]={"zhang",2500,20,"lisi",4500,22,"wang",2500,23};ofstream out("D:\vs code_code\Teacher_DiXW\lzy.txt",ios::binary);//后缀表明是二进制文件for(int i=0;i//out //读文件ifstream in("D:\vs code_code\Teacher_DiXW\lzy.txt",ios::binary);Worker temp;for(int i=0;i in.read((char*)&temp,sizeof(Worker)); cout     ifstream in("D:\vs code_code\Teacher_DiXW\lzy.txt");    if(in)    {        cout     string a("hello");    fstream in_out;    in_out.open("D:\vs code_code\Teacher_DiXW\lzy.txt",ios::in | ios::out | ios::trunc);//trunc保证了没有该文件,则自动创建该文件    in_out     int n;    float f;    string str;    string strText="13.14 hello";    istringstream s(strText);    s  n;//n是int类型    s  f;//f是float类型    s  str;//str是字符串类型    cout     cout    //2.用的多的情况 是用来做类型转换 或者 字符切割    //to_string 数字转换成字符串    //cout         char get_char;        ip  ipNum[i];//ip  ipnum[1]  ipnum[2]  ipnum[3]  ipnum[4];         if(i 

上一篇:服务器上怎么登录qq?

下一篇:Codeforces Round 450 (Div. 2) C. Remove Extra One