C++primer 标准IO库

C++ Primer 第八章 标准IO库 学习本章内容之前有必要对缓冲区的概念做一个基本了解,我引用了网上一片文章《C++编程对缓冲区的理解》,内容如下: 什么是缓冲区   缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。   缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓... 阅读详情

面向对象的标准库

实际的程序不仅限于对控制窗口的IO,通常还需要读或写已命名的文件。此外,程序还应该能够方便地使用IO操作格式化内存中的数据,从而避免读写磁盘或其他设备的复杂性和运行代价。应用程序还需要支持宽字符语言的读写。

从概念上看,无论是设备的类型还是字符的大小,都不影响需要执行的IO操作。要同时支持不同的设备和不同大小的字符流,标准库使用了继承来定义一组面向对象的类。一般而言,通过继承关联起来的类型都共享公共的接口。如果两个类型存在继承关系,则可以说一个类(派生类)“继承”了其父类(基类)的行为——接口。

IO类型在三个独立的头文件中定义:iostream定义读写控制窗口的类型,fstream定义读写已命名文件的类型,而sstream定义的类型则用于读写存储在内存中的string对象。在fstream和sstream里定义的每种类型都是从iostream头文件里定义的相关类型派生而来。

头文件iostream中包含的类型:istream 从流中读取,ostream写入到流中去,iostream对流进行读写,从istream和ostream派生而来。

头文件fstream中包含的类型:ifstream从文件中读取,由istream派生而来;ofstream写到文件中去,由ostream派生而来;fstream读写文件,由iostream派生而来。

头文件sstream中包含的类型:istringstream从string对象中读取,由istream派生而来;

ostringstream写到string对象中去,由ostream派生而来;

stringstream对string对象进行读写,由iostream派生而来。

由于ifstream和istringstream类型继承自istream类,故读istream对象的程序也可用于读文件(ifstream)或者string对象(istringstream)。类似地,提供输出功能的程序同样可用于ofstream或ostringstream取代ostream类型实现。除istream和ostream类型之外,iostream头文件还定义了iostream类型。iostream类型继承自istream和ostream。这意味着iostream对象共享了他的两个父类的接口。iostream类型在同一个输入流上实现输入和输出操作。

对IO类使用继承的另外一个含义:如果函数有基类类型的引用形参时,可以给函数传递其派生类型的对象。这样就可以编写一个函数,而将它应用到三种类型的流上:控制台、磁盘文件或者字符串流。

IO对象不可以复制或赋值,这个要求有两层含义:1、只有支持复制的元素类型可以存储在vector或者其他容器类型里,因此流对象是不能存储在vector(或其他)容器中的(即不存在存储流对象的vector或者其他容器)。2、形参或返回类型也不能为流类型。如果需要传递或返回IO对象,则必须传递或返回该对象的指针或引用。

一般情况下,如果要传递IO对象以便对它进行读写,可用非const引用的方式传递这个流对象。对IO对象的读写绘改变它的状态,因此引用必须是非const的。

IO类型在三个独立的头文件中定义:iostream定义读写控制窗口的类型,fstream定义读写已命名文件的类型,sstream所定义的类型用于读写存储在内存中的string对象。

头文件

类型

iostream

istream 从流中读取
ostream 写到流中去
iostream对流进行读写,从istream和ostream派生而来

fstream

ifstream 从文件中读取,由istream派生而来
ofstream 写到文件中去,由ostream派生而来
fstream 读写文件, 由iostream派生而来

sstream

istringstream从string对象中读取,由istream派生而来
ostringstream写到string对象中去,由ostream派生而来

stringstream 对string对象进行读写, 由iostream派生而来


1. 国际字符的支持

到目前为止,所描述的流类读写的是由char类型组成的流。此外,标准库还定义了一组相关的类型,支持wchar_t类型。每个类都加上“w”前缀,以此与char类型的版本区分开来。于是,wostream、wistream和wiostream类型从控制窗口读写wchar_t数据。相应的文件输入输出类是wifstream、wofstream和wfstream。而wchar_t版本的string输入/输出流则是wistringstream、wostringstream和wstirngstream。标准库还定义了从标准输入输出读写宽字符的对象。这些对象加上"w"前缀,以此与char类型的版本区分:wchar_t类型的标准输入对象是wcin;标准输出是wcout;而标准错误则是wcerr。

每个IO头文件都定义了char和wchar_t类型的类和标准输入/输出对象。基于流的wchar_t类型的类和对象在iostream中定义,宽字符文件流类型在fsteam中定义,而宽字符stringstream则在sstream头文件中定义。

2. IO标准库不可复制或赋值

这里先不说为什么标准IO库不允许做复制或赋值操作。以后将会查资料补上来。

一、只有支持复制的元素类型可以存储在Vector或其他容器类型里。由于流对象不能复制,因此不能存储在vector(或其他)容器中;

二、形参或返回类型也不能为流类型。若需要传递或返回IO对象,则必须传递或返回指向该对象的指针或引用。一般情况下,如果要传递IO对象以便对它进行读写,可用非const引用的方式传递这个流对象。对IO对象的读写会改变它的状态,因此引用必须是非const的。

3.条件状态

IO标准库管理一系列条件状态成员,用来标记给定IO对象是否处于可用状态,或者碰到了哪种特定的错误。标准库定义的一组函数和标记,提供访问和操纵流状态的手段。

strm::iostate 机器相关的整型名,由各个iostream类定义,用于定义条件状态

strm::badbit strm::iostate类型的值,用于指出被破坏的流

strm::failbit strm::iostate类型的值,用于指出失败的IO操作

strm::eofbit strm::iostate类型的值,用于指出流已经到达文件结束符

s.eof() 如果设置了流s的eofbit值,则该函数返回true

s.fail() 如果设置了流s的failbit值,则该函数返回true

s.bad() 如果设置了流s的badbit值,则该函数返回true

s.good() 如果流s处于有效状态,则该函数返回true

s.clear() 将流s中的所有状态值都重设为有效状态

s.clear(flag) 将流s中的某个指定条件状态设置为有效。flag的类型是strm::iostate

s.setstate(flag) 给流s添加指定条件。flag的类型是strm::iostate

s.rdstate() 返回流s的当前条件,返回值类型为strm::iostate

流必须处于无错误状态,才能用于输入或输出。检测流是否可用的最简单的方法是检查其真值:

if (cin) // if 语句直接检查流的状态

while (cin >> word) //while语句则检测条件表达式返回的流的状态,若成功输入,则条件检测为真

4. 缓冲区管理

每个IO对象管理一个缓冲区,用于存储程序读写的数据。如有下面的语句:

os << " please enter a value:";

系统将字符串字面值存储在流os关联的缓冲区中。下面几种情况将导致缓冲区的内容被刷新,即写入到真实的输出设备或者文件:

(1)程序正常结束。作为main返回工作的一部分,将清空所有输出缓冲区;

(2)在一些不确定的时候,缓冲区可能已经满了,在这种情况下,缓冲区将会在写下一个值之前刷新;
(3)用操纵符显式地刷新缓冲区,例如行结束符endl;

(4)在每次输出操作执行完后,用unitbuf操纵符设置流的内部状态,从而清空缓冲区;

(5)可将输出流与输入流关联起来。在这种情况下,在读输入流时将刷新其相关的输出缓冲区。

 例子:

例子:


●创建并向文件写入信息:

方式一:

#include <fstream.h>
#include <iomanip.h>
void main()
{
    ofstream f1("a.txt");
    if (!f1)
    {
       return;
    }
    f1<<"姓名:"<<"袁孙良"<<endl;
    f1<<"性别:"<<"男"<<endl;
    f1.close();
}


方式二:

#include <fstream.h>
void main()
{
       ofstream fin("a.txt");
       if (!fin)
       {
            cout<<"File open error";
            return;
       }
       char c[80] = "我是一个兵!";
       fin.write(c,80);
       fin.close();
}



●从文件中读取信息:

方式一:

#include <fstream.h>
void main()
{
       fstream f("a.txt",ios::out);
       f<<123<<3.14<<'A'<<"How are you";
       f.close();
       f.open("a.txt",ios::in);
       int i;
       double d;
       char c;
       char s[20];
       f>>i>>d>>c;
       f.getline(s,20);
       cout<<i<<"  "<<d<<"   "<<c<<"   "<<s<<endl;
       f.close();

}


方式二:

#include <memory.h>
#include <fstream.h>
void main()
{
       ifstream fin("a.txt",ios::nocreate);
       if (!fin)
       {
              cout<<"File open error";
              return;
       }
       char c[80];
       memset(c,0,80);
       while (!fin.eof())
       {
              fin.read(c,80);
              cout<<c<<endl;
       }
       fin.close();
}


简单的复制文件:

#include <fstream.h>
void main()
{
       ifstream fin("a.txt",ios::nocreate|ios::binary);
       if (!fin)
       {
              cout<<"File open Error"<<endl;
              return;
       }
       ofstream fout("b.txt",ios::binary);
       char c[1024];
       while (!fin.eof())
       {
              fin.read(c,1024);
              fout.write(c,fin.gcount());
       }
       fin.close();
       fout.close();
}


 

官网下载STM32系列芯片的产品选型手册 官方提供了产品选型手册,便于工程师们进行产品选型。 那么,在哪下载"产品选型手册"呢?请看下文。 阅读详情

相关推荐

基于STM32F103标准库与DMA的实时音频FFT频谱显示系统设计

本文详细介绍了基于STM32F103芯片与DMA技术实现实时音频FFT频谱显示系统的设计方法。通过标准库驱动和FFT算法处理音频信号,结合OLED显示屏实时绘制音乐频谱,涵盖硬件选型、核心原理、开发环境搭建及性能优化等关键步骤,为数字信号处理应用提供实用参考。

yellow的专栏 777

C++ primer 标准IO库

要同时支持不同类型不同大小的字节流,标准库使用继承来定义一组面向对象类。通过继承关联起来的类型共享共同的接口。当一个类继承另一个类的时候这两个类可以使用相同的操作。 父类叫做基类,继承而来的叫派生类。 IO类型在三个独立的头文件中定义:iostream定义读写控制窗口的类型,fstream定义读写已命名文件的类型,sstream定义用于读写存储在内存中的string对象。 在fsteam和ss

xxiaozr的博客 388

深入解析Lora模块的工作原理与应用场景

本文深入解析了Lora模块的工作原理与应用场景。Lora模块作为物联网领域的核心无线通信组件,凭借其独特的扩频调制与半双工通信技术,实现了远距离、低功耗的数据传输。文章详细拆解了其技术内核,包括空中唤醒等低功耗奥秘,并提供了地址、信道、空中速率等关键参数的实战配置指南。最后,探讨了Lora模块在智能家居、智慧农业、城市监测等广域物联网场景中的具体应用,为开发者提供了从理论到实践的完整参考。

weixin_29174385的博客 333

《C++ Primer》学习笔记(八):标准 IO 库

第8章 IO库 部分IO库设施: istream:输入流类型,提供输入操作。 ostream:输出流类型,提供输出操作。 cin:istream对象,从标准输入读取数据。 cout:ostream对象,向标准输出写入数据。 cerr:ostream对象,向标准错误写入数据。 >>运算符:从istream对象读取输入数据。 <<运算符:向ostream对象写入输出数据。 g...

种树最好的时间是10年前,其次是现在!!! 9582

告别命令行恐惧!用nTopology可视化工具5分钟搞定三维Voronoi泡沫建模

本文介绍如何利用nTopology可视化工具快速生成三维Voronoi泡沫结构,无需编程即可完成复杂建模。Voronoi结构在轻量化设计、能量吸收和生物医学等领域具有重要应用,传统命令行方法门槛较高。通过nTopology的四步流程,用户可在5分钟内创建仿真就绪模型,大幅提升设计效率。

weixin_30764771的博客 427

工程经验分享:PCIE(1)

本文介绍AXI Bridge For Pcie Express Gen3 Subsystem 的使用方法。这个IP兼具简单与实用性,将PCIE协议层实现于内部,仅留出AXI接口供开发者使用。开发者不需要处理复杂的PCIE协议数据,只需要对AXI总线有所了解即可,十分符合Xilinx一贯的开发风格。本文无关PCIE协议本身,仅分享实用性的工程经验,以PCIE IP为核心,一步一步搭建一个简单的子系统,以此说明用法。文中所有内容均已通过项目检验。

weixin_42415266的博客 3843

C++ Primer 08 标准IO库

C++ Primer 08 标准IO库

QiQi的专栏 258

绝缘检测是什么? 绝缘检测原理 绝缘检测检测的是什么?那个量?电压?电流?电阻?

绝缘电阻是电气设备和电气线路最基本的绝缘指标。对于低压电气装置的交接试验,常温下电动机、配电设备和配电线路的绝缘电阻不应低于0.5MΩ(对于运行中的设备和线路,绝缘电阻不应低于1MΩ/kV)。 绝缘电阻的正确测量方法 现代生活日新月异,人们一刻也离不开电。在用电过程中就存在着用电安全问题,在电器设备中,例如电机、电缆、家用电器等。 影响因素 环境温湿度 一般材料的绝缘电阻值随环境温湿度的升高而减小。相对而言,表面电阻(率)对环境湿度比较敏感,而体电阻(率)则对温度较为敏感。 湿度增加,表面泄漏增大,导体电导

dianqicyuyan的博客 2万+

【C++ Primer】标准IO库

八、标准IO库 1. IO标准库 标准库: 头文件                 类型 iostream            istream, ostream, iostring从前两者派生而来 fstream              ifstream, ofstream, fstream从iostream派生而来 sstream

Learning, thinking and coding 1344

YOLOv12环境配置,手把手教你使用YOLOv12训练自己的数据集和推理(附YOLOv12网络结构图),全文最详细教程

YOLO 系统尊嘟太卷了吧,YOLOv11 还没完明白,YOLOv12 就重磅来袭,YOLOv12 是由纽约州立大学联合中科院在 2025年2月19 日发布,从 YOLOv12 论文题目我们大概就知道做了那些更新 ,下图是YOLOv12 在 COCO 数据集上的性能表现引入区域注意力机制(area-attention):通过引入十字形窗口自我注意机制,沿水平和垂直条纹计算注意力机制,纵横交错的注意机制。如下图所示,区域注意力采用最多简单的等分方法,将特征地图垂直或水平划分为 L 个区域。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 6万+

[SVA]SystemVerilog Assertion Property开发技巧总结

SystemVerilog Assertion开发技巧总结 一、在property中可以使用if-else条件语句 如下面的例子,根据misc_phy_12g_rx的取值,选择不同的判断语句 property ck1_en_rose_chk(); @(posedge clk) disable iff(~rst_n) ad_pn_ck1en & (current_state !== ST_IDLE) |->...

元直的博客 5924

C++ Primer 第八章 标准 IO 库

8.1. 面向对象的标准库 IO 类型在三个独立的头文件中定义:iostream 定义读写控制窗口的类型,fstream 定义读写已命名文件的类型,而 sstream 所定义的类型则用于读写存储在内存中的 string 对象。在 fstream 和 sstream 里定义的每种类型都是从 iostream 头文件中定义的相关类型派生而来。   ...

techmonkey的专栏 209

动力学约束下的运动规划算法——状态栅格规划器(State Lattice Planner)

A*、RRT等算法建立的用于路径搜索的图模型是不考虑机器人的动力学约束的,其构建的图模型的两个相邻节点之间的路径可能是不可行的,或者很难被机器人跟踪的,现在我们想要使得图中相邻两个节点间的连接是一种满足动力学约束的可行的连接,那么如何构建一个这样的图呢? 构建这样的图通常有两种方法:第一种是基于控制空间的采样(正向方法)

慕羽★的博客 3105

C++ PRIMER 第八章 标准IO库

  操纵符是一个函数或一个对象,会影响流的状态,并能用作输入或输出的运算符的运算对象(操作数)(a manipulator is a function or object that can be used as an operand to an input or outputoperator.) 第8章 标准IO库    8.1 面向对象的标准库   sstream所定义的类型用于读写存...

金色的省略号 160

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

《C++ Primer》习题参考答案:第8章 - 标准 IO 库

第八章 IO库 练习8.1 编写函数,接受一个istream&参数,返回值类型也是istream&。此函数须从给定流中读取数据,直至遇到文件结束标识时停止。它将读取的数据打印在标准输出上。完成这些操作后,在返回流之前,对流进行复位,使其处于有效状态。 解: std::istream& func(std::istream &is) { std::strin...

种树最好的时间是10年前,其次是现在!!! 5108

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C++Primer 标准IO库

1.

ninoKOP的专栏 637

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

[C++ Primer] 标准IO库

1.IO对象不可复制或赋值,由于不能复制所以流对象不能存储在vector等容器中,而且函数形参或返回类型也不能为流类型,如果需要传递或者返回IO对象,则必须传递或者返回该对象的指针或者引用。 2.如果在一个循环中读取若干个文件,且打算重用已存在的流对象,那么必须在每次循环结束后关闭(close)和清空(clear)文件流。原因在于如果遇到文件结束符或者其他错误,将设置流的内部状态使得不能再对该流

Fremaks的专栏 819

重温《C++ Primer》笔记二 标准IO库的条件状态

在C++的标准IO库中,指定了一些方法来管理缓冲区及其流的状态。虽然很多程序只需要知道流是否有效即可,但是,不排除某些程序需要更详细地访问或者控制流的状态,以及当流出现错误的时候需要弄清楚具体是哪方面的错误。 首先,标准IO库用一个枚举来定义了流对象的四种状态: enum _Iostate{ goodbit = 0x0, //正常可用状态 eofbit = 0x1, //遇

芳草源的博客 767

C++ Primer学习之(8)——标准IO库

P379: wo

song_mu的专栏 727

C++ Primer 4 第八章 标准 IO 库

第八章 标准 IO 库 1. 面向对象的标准库 IO 类型在三个独立的头文件中定义:iostream 定义读写控制窗口的类型,fstream 定义读写已命名文件的类型,而 sstream 所定义的类型则用于读写存储在内存中的 string 对象。在 fstream 和 sstream 里定义的每种类型都是从 iostream 头文件中定义的相关类型派生而来。istream 是 ifstream

我的读书笔记(2011-2013) 481

《C++ Primer》 第08章 标准 IO 库 | Good !

第08章:标准IO库 ——C++的输入/输出(input/output)由标准库提供。标准库定义了一族类型,支持对文件和控制窗口等设备的读写(IO)。 第一节:面向对象的标准库 @ 学习摘录062:iostream定义读写控制窗口的类型 ——istream 从流中读取 ——ostream 写到流中去 ——iostream 对流进行读写;从istream和ostream...

anchang7456的博客 165

c++Primer,八,标准IO库

这一章继续介绍库,只不过这个库更常用,是IO操作的,在c中我们用printf,file等来操作IO,在c++中,也定义了一些库类来完成。 总共结束3个,iostream操作控制窗口的输入输出,也就是命令行;fstream操作文件的读取与存入;sstream操作string的。 1.控制窗口:istream和ostream分别是输入与输入类,我们用的cin和cout分别是他们定义的对象,c++为

r784709355的专栏 512

[C++ Primer 第4版]第8章 标准IO库

P244 getline函数,需要分别取istream类型和

咖啡是我是咖啡 484

C++ Primer(标准IO库)

第八章 标准IO库 8.1面向对象的标准库 1.   #include #include // 从iostream继承 #include   // 从iostream继承 2.   国际字符支持 char有相应的wchar_t wostream wistream  wiostream   wifstream wofstream  wfstr

飘飘摇摇的風 449

C++ Primer_标准IO库杂记

IO类型在三个独立的头文件中定义: iostream定义读写控制窗口 fstream定义读写已命名文件类型 而ssrteam所定义的类型则用于读写存储在内存中的string对象 IO对象不可复制或赋值  标准库类型不允许做复制或赋值操作 只有支持复制的元素类型可以存储在vector或其他容器类型里,所以标准库类型不能存储在vector或其他类型的容器中 形参或返回类型

Dreamer Thinker Doer 960

C++ Primer第八章标准IO库笔记

IO对象不可复制或赋值 这有两个含义: 1)由于流对象不能复制,则不能存储在vector(或其它)容器中(即不存在存储流对象的vector或其它容器). 2)形参或返回类型不能为流类型,如果需要传递或者返回IO对象,则必须传递或返回指向该对象的指针或引用. ofstream out1, out2; // 错,不能赋值 out1 = out2; // 错,参数为流类型(调用的时候就会执行复制操作...

qq_26496077的博客 278
上一篇: 内联函数的声明和定义
下一篇: C++中文件流(fstream)的使用方法及示例
seadplus
博客等级 码龄15年 57粉丝 61原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值