当前课程知识点:C/C++:从基础语法到优化策略 >  Final Exam >  Final exam >  3.9 File input and output

返回《C/C++:从基础语法到优化策略》慕课在线视频课程列表

3.9 File input and output在线视频

返回《C/C++:从基础语法到优化策略》慕课在线视频列表

3.9 File input and output课程教案、知识点、字幕

大家好 我们最后讲一下文件的读写

也就叫文件的输入和输出

我们后面讲的是使用c++进行文件的输入和输出文件的读写

那么这个要比c语言的文件读写

要简单和方便很多

如果我们要对文件进行写操作

也是把内容写到文件里面去也叫output

那么基本上是这么几步

第一步呢 就是先include相应头文件

然后创建一个ofstream的对象

创建好对象之后 我们可以调用它的函数open

open函数去把这个文件打开

打开的时候 如果这个文件不存在 其实就是创建一个新文件

那么然后 我们怎么去往这里面写内容

往这里面写 这写的过程中其实它的用法

ofstream跟我们的cout是完全一样的 这个完全一样的用法

我们随后在例子里面会给大家展示

最后 写完之后 我们要把文件关闭 这是整个的流程

那么我们来看这个例子 这个例子

这个例子是这样的

我们来看 首先 按照刚才里面是把这个头文件

include进来 然后创建一个ofstream对象

创建好之后 open这个文件如果不存在 就会把它打开

如果存在会怎么办

会出错还是怎么

大家可以自己练习一下如果这个文件存在会发生什么 会发生什么

还有就是如果创建失败 会怎么处理

文件如果创建失败会怎么样

但这个代码里没有这个的处理操作文件创建失败

好 我们再往下看

那么下一步就说让你输入Enter the make and model of automobile

他说让你输入一辆汽车 汽车的信息那就是

然后他说getline automobile 他就把这个这个信息填到automobile

automobile 是什么类型 那我们来看看是个字符串

然后他又会从输入里面读一个字符串

赋给automobile这个变量

然后让你去输这个model year 就是这辆车是哪一年的

你的输入给year是个整数

然后再说 Enter the original asking price就是它的价格

那得把它输给a这个价格

然后再乘上一个折扣是d这个价格

然后乘了一个0.913然后赋给d_price a_price d_price

那么我们获得这些信息之后后面才是输出

如果我们要把这些信息打印到屏幕上

cout fixed来控制它的格式

precision也是控制他的格式的 setf这些都是一样

那么 真正的输出是从这儿开始

然后我说make and model

然后把刚才用户输入的输出去 哪一年输出去

这个 这个Was asking 这个把这价格输出去

Now asking 就是然后把这两个价格都输出来

这个是输出到屏幕上 我们很容易理解 看代码就懂了

那么如果输出到文件 怎么做呢

大家看 其实除了把cout换成outFile

其他没有任何变化 用法是完全一样的

这都是stream cout和output outFile 他们都是stream

他们的用法是完全一样的 你这样去用

然后把out 当然你要记得唯一不同的是outFile 要open要close 要关闭掉

然后结束 那么我们来看一看这个程序 去运行一下啊 编译一下

outFile 运行 他会问

model汽车是什么 什么汽车比较好呢

benz 哪一年的 2020年 多少钱呢 30万元吧

那么这样我们看到他会把这个信息

这个信息打到屏幕上了

按说应该有同样的信息打印到那个文件里面

那个文件叫什么名字来着

运行的时候 我们那个文件叫carinfo.txt

我们来看这个文件存在不 在当前目录下

carinfo 在这存在了刚创建的

那么 这个信息跟刚刚打印到屏幕上的信息是完全一样的

所以说 文件我们会向屏幕输出

那么我们也就会向文件来输出了 这是输出

好我们再来看一下输入也就是如何从文件里面去读

那么我们前面讲的输出是跟cout的很像 那输入就跟cin很像了

的确如此如果是 你要是输入的话

跟刚才一样 头文件包进来 但是要就要创建一个ifstream 这个对象

然后由ifstream 这个对象也是open

这个open打开一个文件

既然你要读文件 那这个文件应该是存在的

如果他不存在会要怎么办 不存在怎么办

所以说 那我们要做一些错误处理 错误处理让你的程序稳定一些

最后读完之后要close 要关掉

读的操作跟cin一样 用这个符号 两个大于好 在一起

你也可以用get getline等等其他的函数来做

也就是说这个里面cin 和 ifstream的用法是

你可以认为是几乎完全一样的

我们来看一看这个例子 这个例子

我们有一个例子 叫什么名字 又忘了 sumafile

这个例子是这样的 我们来看

首先main函数 当然include的这边都有了

include fstream 还有 cstdlib 和SIZE 60定义了

然后using namespace 然后我们创建一个文件名的变量数组

然后我们就会让用户输一个文件名进来

输一个文件名进来最长是size 不能太多了

把它读到这个变量里面去把英文输入

然后用inFile把这个文件打开 把这个文件打开

打开之后如果打开失败了

那就是如果is_open是True的话就成功

is_open是false 那就是取反

那就是如果没有打开 成功打开 那么我们就干什么

我们就可以说 打印一个信息

说不能打开这个Can not open the file filename

programming terminating程序要终止 然后exit

然后就把他这个 这个实际上是一个宏 那个FAILURE是个1就表示程序终止

这个的话就会运行程序告诉操作系统我要程序异常退出了

但一般来说不建议大家用这个

因为exit在这一旦执行 他就相当于把程序立马就杀死

不会做任何其他的事情 就是到此为止

很多时候 我们一个比较大的程序 你要退出它的时候 你需要做一些善后处理

善后处理那么一般不要这样做 一般不要这样做

好我们来看 如果打开成功 那就继续往下执行了

我们希望做什么

其实我们希望从一个文件里读一些浮点数 然后把它求和

这是sum的和 count是读了几个

那么inFile 那这就是怎么读呢

就inFile到value这样就是一个个的值就读进来了 value是 double

inFile is good

这个就等价于这个 这个是一样的

inFile is good 就是说没有问题

读起来一切很顺利 那我们就count++读了一个

把这个值sum加起来求和 然后再读一个一直循环

只要good 那就继续读

除非碰到这个EOF end of file就文件结尾或者其他的异常

那他就停下停下那么如果是

停下之后呢 他会判断一下

if inFile EOF end of file就表示这个文件已经读完了 就是会异常有问题

如果是fail就是出错了

然后其他原因是其他原因 停下了

那么count等于零 如果等于零就是表示这里面一个数据都没读到

count等于零 这是if else的用法

else 如果不是零那说明我读到一些数据 那说我读到了几个数据

他们的和是多少

他们的平均值是多少 打印出来

最后把文件关闭 文件关闭

退出所以这样的一个程序

那么我们 我在这准备了一个文件 不是这个

data.txt 吧 里面存着1 3 5 5.5 7跟9 这几个数而且分两行

而且是用这个隔开

那么我们来试一试去读它 首先我们要编译

sumafile 读的话运行它会让我们输入这个文件名

如果我们不小心输错了

他说Program terminating 就表示在这里

前面

如果读不到文件

那么这个时候is_open是false 那就会退出

好 我们再运行一次

读这个文件是我们这个文件 data.txt回车

一切很正常 他说end of file reached

因为这个里面只有这个数字 他读到这个文件结尾

他就说 读到五个 然后这和是25.55平均值是5.11这样

那么如果这里面我放个字母会怎么办

放个字母 他第一个和第二个之间放个字母 那么我们

data.txt 大家想想他会引起什么错误 我们再来看一下代码

刚才如果读到文件 文件结尾表示顺利读完文件

那就这个 肯定不是这个 对吧 Fail 还是其他

我们来看运行

这个输出是Input terminated by data mismatch

我们来看mismatch是在哪里

这里input是Failed 就说格式不对

就这样 提示

这是 这就是这个例子 这是这个例子

当然 如果是零就是说 No data processed

如果什么时候让他等于零呢 比如说我在这 加个d

那这个时候他可能就一个也读不到了

因为刚才在之前还读到了一个 那现在的话

那可能一个都读不到了

data.txt 是的 他说data mismatch No data processed

所以这个就是我们的 就是读文件

其实读文件跟从输入里面去读

他都是一样的 都是一样的

用法没有明显的区别

C/C++:从基础语法到优化策略课程列表:

Week 1 Quick start

-1.1 Basic knowledges

-1.2 Setting Out to C++

-Lecture notes

-Example code

-Quiz 1

Week 2 Data types

-2.1 Compile and link

-2.2 Integers

-2.3 Floating-point numbers

-2.4 C++ Arithmetic Operators

-Lecture notes

-Example code

-Quiz 2

Week 3 Expressions and statements

-3.1 Some operators

-3.2 for loop

-3.3 Relational expressions (> < ==)

-3.4 while loop

-3.5 Branching statements (if else)

-3.6 Logical expressions

-3.7 switch statement

-3.8 break and continue statements

-3.9 File input and output

-Lecture notes

-Example code

-Quiz 3

Week 4 Array, string and structures

-4.1 Array

-4.2 Array strings

-4.3 string class strings

-4.4 Structures, Unions and Enumerations

-Lecture notes

-Example code

-Quiz 4

Week 5 Pointers and memory management

-5.1 Pointers

-5.2 Allocate memory: C style

-5.3 Allocate memory: C++ style

-5.4 Managing memory for data

-Lecture notes

-Example code

-Quiz 5

Week 6 Functions

-6.1 Function review

-6.2 Various functions

-6.3 Recursion and pointer to functions

-6.4 Reference and const

-Lecture notes

-Example code

-Quiz 6

Week 7 Functions and optimization

-7.1 Adventures in functions

-7.2 Speedup your program

-Lecture notes

-Example code

-Quiz 7

Week 8 ARM and OpenCV

-8.1 C/C++ with ARM development board

-8.2 Some tricks in OpenCV

-Lecture notes

-Example code

-Quiz 8

Week 9 Class

-9.1 Classes in C++

-9.2 Constructors and destructors

-9.3 this pointer

-Lecture notes

-Example code

-Quiz 9

Week 10 Operator overloading and type casts

-10.1 Operators in cv::Mat in OpenCV

-10.2 Operator overloading

-10.3 Friend functions

-10.4 Automatic conversions and type casts for classes

-Lecture notes

-Example code

-Quiz 10

Week 11 Dynamic memory management and classes

-11.1 Dynamic memory and classes

-11.2 New and improved String class

-11.3 Using pointers to objects

-Lecture notes

-Example code

-Quiz 11

Week 12 Class inheritance and memory management

-12.1 Class inheritance

-12.2 Static and dynamic binding

-12.3 Access control: protected

-12.4 Inheritance and dynamic memory allocation

-Lecture notes

-Example code

-Quiz 12

Week 13 Constructor, assignment and class templates

-13.1 Constructor and assignment

-13.2 Classes with object members

-13.3 Private inheritance

-13.4 Class templates

-Lecture notes

-Example code

-Quiz 13

Week 14 CNN, exceptions in C++

-14.1 CNN for image classification

-14.2 Exceptions

-Lecture notes

-Example code

-Quiz 14

Week 15 Friends, nested classes, RTTI and type cast

-15.1 Friends

-15.2 Nested classes

-15.3 RTTI and type cast operators

-Lecture notes

-Example code

-Quiz 15

Final Exam

-Final exam

3.9 File input and output笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。