想法C++学习笔记简友广场

第六章 分支语句和逻辑运算符(4)简单文件输入输出

2019-12-13  本文已影响0人  阿厉a_li

(四)简单文件输入输出

    C++可以使用键盘输入和屏幕输出(控制台输入输出),同样可以用文件输入输出,此时cin和cout的优势就很明显了,因为cin和cout是用输入和输出流的概念来写的,因此可以将流从输出到屏幕或从键盘流入改为输出到文件或从文件输入,这样就有了文件的输入输出。

1.文本I/O和文本文件

    输入一开始都是文本类型,是cin对象文本格式的字符转换成需要的类型,比如int型就会将文本字符转换为整型,double型就会将浮点文本转化为浮点型。本模块讨论的文件I/O相当于控制台I/O,因此仅适用于文本文件。

2.写入到文本文件中

    如果我们用的是控制台输入输出,则必须包含头文件<iostream>,头文件中定义了一个用于输出的ostream类,头文件中还声明了一个用于输出的ostream类的对象cout。

    现在我们要将文本输出到文件中,与输出到控制台类似,我们需要包含头文件<fstream>,头文件中定义了一个用于输出的ofstream类,我们必须自己定义它的对象并命名,同样,我们也需要使用命名空间std

比如:ofstream fout;

fout.open(“kdjl.txt”);

    利用ofstream的对象fout调用类函数open();这个函数的参数可以是一个字面字符串,也可以是一个字符串数组名或指针。这样,可以将ofstream对象和文件关联起来,之后就可以像cout那样用ofstream对象来输出内容到文件中。注意,前面的文件名的参数,可以是不存在的文件,这样程序会创建一个这样的文本文件。而如果是存在的文件,则默认情况下,程序会先丢弃掉原来的内容,然后再写入新的内容。程序使用完该文件之后,应该将其关闭,fout.close();

3.从文本文件中读取

    情况与上面完全相似。这时候使用的头文件依然是fstream,但是需要用ifstream类来创建一个对象比如fin或者inFile等。通过对象打开文件,然后才能从文件中读取,因此检查文件是否被打开是首要的,方法是使用is_open(),比如inFile.open(“good.txt”);if (!inFile.is_open()) {exit(EXIT_FAILURE);}函数exit的原型在cstdlib头文件中,而EXIT_FAILUER是一个同操作系统通信的参数值,函数exit将终止程序。Exit在某种程度上就和程序执行成功时用return来返回0值是一样的,只不过是发生了错误直接退出时候返回的信息。

    !!!!!读取文件的时候,有几点需要检查,一是文件是否到了末尾,eof()函数将返回一个bool值来表示是否读到文件结尾标记EOF,如果为true表示到了结尾处。另外,fail()会在发生类型不匹配的时候返回true,同样,到达EOF时候fail()也将返回true。如果文件受损或发生故障,函数bad()将会返回true。一般我们会使用good()函数来判断是否正确读取上一次输入

     注意:c++中cin对象对文字输入是需要类型匹配的,当发生类型不匹配的时候,程序会怎样做呢?首先,储存输入的变量是不变的;其次,类型不匹配的变量保留在输入队列中;第三,cin会设置输入标志位,也就是输入failbit位被置1;最后对cin方法的调用将返回false(强制类型转换之后)。因此,如果发生类型不匹配的情况,首先要重置标记位,也就是用cin.clear()来将所有的标志位置0;接着,需要将留在队列中的不匹配的类型吃掉,这可以用两种方式,一种是用cin.get()吃掉一个字符,另一种是用cin.ignore()来忽略下一个字符

上一篇 下一篇

猜你喜欢

热点阅读