广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >c++中的基本IO类型是什么
  • 870
分享到

c++中的基本IO类型是什么

2023-06-19 13:06:41 870人浏览 八月长安
摘要

这篇文章主要讲解了“c++中的基本io类型是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“c++中的基本IO类型是什么”吧!引言c++不直接处理输入和输出,而是通过标准库中的类型处理IO

这篇文章主要讲解了“c++中的基本io类型是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“c++中的基本IO类型是什么”吧!

引言

c++不直接处理输入和输出,而是通过标准库中的类型处理IO。IO的设备可以是文件、控制台、string。c++主要定义了三种IO类型,分别被包含在iOStreamfstreamsstream头文件中。

为了支持使用宽字符的语言,标准库定义了一组类型和对象操纵wchar_t类型的数据。

以下是这三种IO库类型以及头文件:

  • iostream头文件

istream(宽字符版本wistream),从流读取数据。
ostream (宽字符版本wostream),向流写入数据。
iostream(宽字符版本wiostream),读写流。

  • fstream头文件

ifstream(宽字符版本wifstream),从文件读取数据。
ofstream (宽字符版本wofstream),向文件写入数据。
fstream(宽字符版本wfstream),读写文件。

  • sstream头文件

istringstream(宽字符版本wistringstream),从string读取数据。
ostringstream (宽字符版本wostringstream),向string写入数据。
stringstream(宽字符版本wstringstream),读写string。

设备类型和字符大小不会影响我们要执行的IO操作。得益于继承机制,以上类型都可以使用>><<运算符以及getline()函数。

IO类型的通用特性

IO对象不能拷贝或赋值

istream is1,is2;is1 = is2; //错误,流对象不能赋值istream is3(is1); //错误,流对象不能拷贝

由于无法拷贝IO对象,因此不能将形参或返回类型设置为流类型。通常使用引用方式传递和返回流。但传递和返回的引用不能是const的,因为读写IO对象会改变IO对象的状态,也就是改变了IO对象。

IO对象的状态信息

IO类定义了一些函数和标志位,帮助我们检查和操纵流的状态:

  • strm::iostate是一种类型,这种类型就像一串二进制位串,每个二进制位串指出了流的状态。(strm为引言中的任意一种IO类型)。

  • eof()函数用于在IO对象上调用,如cin.eof()。如果流检测到eof(文件结束标志),该函数返回true。

  • fail()函数使用同上。如果流处于崩溃或IO操作失败的状态,返回true。

  • bad()函数使用同上。如果流处于崩溃状态,返回true。

  • Good()函数使用同上。如果流处于有效状态,返回true。clear()函数使用同上。将IO对象中的所有条件状态为复位,流的状态变为有效状态,返回void。

  • setstate(flags),将IO对象的状态为按flags(类型为strm::iostate)指示的那样置位。

  • rdstate()函数用于在IO对象上调用,读取IO对象的状态位,返回类型为strm::iostate

一旦流发生错误,这个流上的后续IO操作都会失败,因此最好在使用流之前检查它是否处于良好状态。如

// 如果输入成功,流保持有效状态,条件为真while(cin >> Word){    //读操作成功,其他操作。}

输出缓冲

所有输出流都管理一个缓冲区,用来保存程序读写的数据。

cout << "Hello World!";

串"Hello World!"可能被立即打印出来,也可能被操作系统保存在缓冲区,随后打印。

以下原因可以刷新缓冲(即真正将数据输出到目标设备或文件中):

  • 程序正常结束,自动刷新。

  • 缓冲区满时,自动刷新。

  • 可以使用操作符endlflushends手动刷新缓冲区(只作用一次输出)。

cout << "1" << endl; //字符串后添加换行,然后刷新缓冲区    cout << "2" << flush; //仅刷新缓冲区    cout << "3" << ends;  //字符串后添加一个空字符,然后刷新缓冲区。

通过操作符unitbuf设置自动刷新。不同于endlflushends只作用于一次输出,设置了unitbuf后的输出流每输出一次都会自动刷新缓冲区。

cout << unitbuf;//下面的语句每执行一次输出,就刷新一次缓冲区。    cout << "1"; //输出"1",自动刷新缓冲区    cout << "2"; //输出"2",自动刷新缓冲区    cout << "3"; //输出"3",自动刷新缓冲区    cout << "4"; //输出"4",自动刷新缓冲区    ...    cout << "nounitbuf"; //回到流默认的缓冲方式

关联流。读写被关联的流时,关联到的流的缓冲区会被刷新(tie()函数括号里面的是关联到的流,调用tie()的流是被关联的流)。cout 和 cin默认关联在一起,使用cin读取数据时,cout的缓冲区被刷新。

 cout << "Fuck you!"; //没有指定操作符,cout默认不刷新,该语句执行完后"Fuck you!"可能立即被输出到屏幕,也可能稍后被输出。    int i;    cin >> i; //cout的缓冲区被刷新,此时"Fuck you!"一定已经真正输出(可能在之前就已经真正输出,此时刷新缓冲区等于什么都没做)。

使用tie()函数关联流和解除关联:

 cin.tie(&cout); //有参数的tie(),参数为指向流的指针,且指针不为空,此时建立关联。    cin.tie(nullptr); //有参数的tie(),且指针为空,此时解除cin和其他流的关联。    cin.tie(); //无参tie(),返回指向cin当前关联到的流的指针。

Note:

若程序崩溃即异常终止,输出缓冲区不会被刷新,换言之,缓冲区中的数据可能并没有真正被输出到文件或设备。

文件IO

创建文件流

前面所过,所有IO类型都可以使用>>、 <<getline(),除此之外,文件IO还有一些特有的操作。

创建文件流:

 fstream fstrm1; //创建未绑定文件的文件流    fstream fstrm2(s1); //创建绑定到指定文件s1的文件流(自动调用open())。s1是string或指向c风格字符串的指针。    //fstream fstrm3(s2, mode); 与第二条语句类似,但指定打开文件的模式。

Note:

当一个fstream的作用域内的代码执行完毕,fstream关联的文件被自动关闭,即fstream对象被销毁时,close()会自动调用。

open和close

使用open打开文件,close关闭文件。对一个已经打开的文件调用open会失败,并且failbit被置位。

string file1 = "qq.dat";    ifstream ifs;    ifs.open(file1);    //读取操作    ifs.close();

文件模式mode

常用的文件模式mode如下:

  • in 只读方式打开文件

  • out 以写方式打开文件

  • app 每次写操作在文件末尾进行

  • ate 打开文件后立即定位到文件末尾

  • trunc 截断文件,即输出会覆盖文件中的原有数据。

  • binary 以二进制方式打开文件

同时指定多个模式时使用|分隔:

ofstream ofs("file1", ofstream::out | ofstream::app);

Note:

out模式隐含trunc即覆盖原文件,若要在原文件末尾添加数据,则需要显式指明app模式。

若没有指定任何模式,则使用默认模式。

string IO

stringstream独有的操作如下:

 sstream strm;   //sstream为sstream头文件中定义的类型,具体可以是istringstream等。    sstream strm(s); //建立一个sstream对象,保存字符串s的一个拷贝。    strm.str(); //返回strm保存的string的拷贝。    strm.str(s); //将string s拷贝到strm。

感谢各位的阅读,以上就是“c++中的基本IO类型是什么”的内容了,经过本文的学习后,相信大家对c++中的基本IO类型是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: c++中的基本IO类型是什么

本文链接: https://www.lsjlt.com/news/296257.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • c++中的基本IO类型是什么
    这篇文章主要讲解了“c++中的基本IO类型是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“c++中的基本IO类型是什么”吧!引言c++不直接处理输入和输出,而是通过标准库中的类型处理IO...
    99+
    2023-06-19
  • c++中的基本IO类型详解
    引言 c++不直接处理输入和输出,而是通过标准库中的类型处理IO。IO的设备可以是文件、控制台、string。c++主要定义了三种IO类型,分别被包含在iostream、fstrea...
    99+
    2022-11-12
  • C语言基本数据类型是什么
    这篇文章主要讲解了“C语言基本数据类型是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言基本数据类型是什么”吧!1.C 语言包含的数据类型如下图所示:2.C语言的基本数据类型shor...
    99+
    2023-06-22
  • Javascript中基本类型和引用类型是什么
    这篇文章给大家分享的是有关Javascript中基本类型和引用类型是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 1.基础类型A. 基础类型有5种,Number,...
    99+
    2022-10-19
  • C++非类型类模板参数的基本概念是什么
    C++非类型类模板参数的基本概念是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。C++编程语言已经出现就立即引起了开发人员的注意,它具有C语言的所用功能,并...
    99+
    2023-06-17
  • C#基元类型、值类型、引用类型是什么
    这篇文章主要讲解了“C#基元类型、值类型、引用类型是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#基元类型、值类型、引用类型是什么”吧!首先了解下什么是基元类型,基元类型是编译器直接...
    99+
    2023-06-17
  • java中基本数据类型是什么
    小编给大家分享一下java中基本数据类型是什么,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1、整型byte 、short 、int 、longbyte 的取值范围:-128~127(-2的7次方到2的7次方-1)shor...
    99+
    2023-06-15
  • Kotlin基本数据类型是什么
    Kotlin基本数据类型是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。fun main() {   &n...
    99+
    2023-06-22
  • JavaScript中有什么基本类型
    这篇文章主要为大家展示了“JavaScript中有什么基本类型”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript中有什么基本类型”这篇文章吧。 ...
    99+
    2022-10-19
  • C++超集C++/CLI模块的基本类型
    数值类型 对于基本的数值类型,在C++/CLI中是可以直接映射为托管类型的数值的,可以同时应用于托管类型和非托管类型,编译器会将其自动转换。 基本类型System命名空间中对应的类注...
    99+
    2022-11-13
  • Python序列类型的基本操作是什么
    本篇内容主要讲解“Python序列类型的基本操作是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python序列类型的基本操作是什么”吧!1 概述在介绍 Python 的常用数据类型之前,我...
    99+
    2023-06-26
  • Python基本数据类型的集合是什么
    这期内容当中小编将会给大家带来有关Python基本数据类型的集合是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。集合作为Python基本数据类型之一,相较于整型和字符串等类型来说难度要高很多,我们需要...
    99+
    2023-06-02
  • C++中CLI模块的基本类型有哪些
    本文小编为大家详细介绍“C++中CLI模块的基本类型有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++中CLI模块的基本类型有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。数值类型对于基本的数值类型...
    99+
    2023-07-02
  • C++字符串类型的基本概念
    这篇文章主要讲解了“C++字符串类型的基本概念”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++字符串类型的基本概念”吧!要使用C++字符串类型中的string 类型必须先包含相关的头文件...
    99+
    2023-06-17
  • JavaScript基本数据类型和引用数据类型是什么
    本篇内容主要讲解“JavaScript基本数据类型和引用数据类型是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript基本数据类型和引用数据类...
    99+
    2022-10-19
  • java中基本数据类型与Object的关系是什么
    这篇文章给大家分享的是有关java中基本数据类型与Object的关系是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。基本数据类型与Object的关系我知道大家是不是都听说过Object是所有类型的基类,但是这...
    99+
    2023-06-29
  • Python的基本语法与数据类型是什么
    本篇内容介绍了“Python的基本语法与数据类型是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!变量和常量在 Python 中,变量是用...
    99+
    2023-07-06
  • C++中的引用类型是什么
    这篇文章主要讲解了“C++中的引用类型是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++中的引用类型是什么”吧!引用,顾名思义是某一个变量或对象的别名,对引用的操作与对其所绑定的变量...
    99+
    2023-06-27
  • 详解C语言的基本数据类型
    目录1、C语言基本数据类型2、计算机中的单位3、各数据类型的大小及字取值大小总结1、C语言基本数据类型 2、计算机中的单位 3、各数据类型的大小及字取值大小 对于short i...
    99+
    2022-11-12
  • C++ Primer的变量和基本类型详解
    目录1.类型转换含有无符号类型的表达式2.字面值常量整形和浮点型字面值字符和字符串字面值转移序列指定字面值的类型布尔字面值和指针字面值总结1.类型转换 对象的类型定义了对象能包含的数...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作