C++程序设计:对数据文件的操作与文件流

news2024/12/23 3:21:50

姚老师小课堂开课啦!

一、文件的分类:

1.ASCII码文件:

ASCII文件使用方便,比较直观,便于阅读,便于对字符进行输入输出,但一般占用存储空间较多,而且需要花费转换时间(二进制形式与ASCII码之间的转换)如果是为了能显示和打印以供阅读,应当按ASCII码文件形式输出。

2.二进制文件:

二进制形式文件可以节省外存空间,而且不需要转换时间,但一个字节并不对应一个字符,不能直接显示文件中的内容,如果程序运行过程中有些中间结果数据暂时保存在磁盘文件中,以后又需要输入内存的,用二进制文件保存才是最合适的。

二、文件的打开与关闭:

1.抽象步骤

1、若想要打开一个文件,我们首先需要有一个文件可供打开,让这个文件和文件流对象建立关联,以便使文件流流向这个文件。

2、此外,我们还需要指定文件的工作方式,不同的打开方式对文件保存的结果也会造成影响,因此文件的工作方式也很重要。

2.主要步骤

主要有两种方式可供选择,以下代码和均可达到目的:

#include<iostream>
#include<fstream>//不要忘记包含头文件fstream
using namespace std;
int main() {
	int a[10];
	ofstream outfile;
	outfile.open("loveyq.dat",ios::out);//第一种打开文件的方式可将本行替换为下方注释代码
	//love_lyq.dat为文件名,ios::out是文件输入输出方式的设置值
	/*第二种打开文件的方式:
	* ofstream outfile;//定义ostream类对象outfile
	* outfile.open("loveyq.dat",ios::out);//使文件流与love_lyq.dat文件建立关联
	*/
	if (!outfile) {
		cerr << "open error" << endl;
		exit(1);
	}
	cout << "enter 10 integer numbers:" << endl;
	for (int i = 0; i < 10; i++) {
		cin >> a[i];
		outfile << a[i] << " ";
	}
	outfile.close();
	return 0;
}

3.运行程序

这时会自动生成一个名为“loveyq.dat”的文件,此时输入的数据将会保存在文件中 

4.打开文件

我们就会看到我们刚刚输入的内容,说明我们刚输入的内容已经被保存到文件中。

 附:打开文件方法:
Step1:重新打开VisualStudio

Step2:右键要打开的项目的文件夹(要打开的文件所在的项目),复制路径

Step3:点开“此电脑”,部分老式系统称之为“我的电脑”,在箭头位置粘贴路径:

 Step4:把最后一个“\”后面的所有部分去掉,这个路径是打开上一级文件夹下的.sln文件,直接回车就会直接打开程序,我们想要打开文件夹从而找到文件,因此需要把这最后一级删去,再按回车就打开文件夹啦~

继续点这个

Step5: 这个就是我们创建出来的文件啦!

附:文件输入输出方式设置值表

需要注意的是,新版本的I/O类库中不提供ios::nocreate和ios::noreplace,以这两种方式在VS2022中操作文件会报错。 

5.新设置值尝试:

当我们以ios::out或ios::in的方式操作文件时,当输入一组新的数据,这组数据会覆盖原来的数据,结果如下。

接下来让我们看一下我们把上方程序中的ios::out改成ios::app会有什么区别吧~

我们发现,新的一组数据没有覆盖原先的数据,而是接着先前的数据继续输入。这是因为当我们以ios::app的方式打开文件时写入的数据将会添加到文件的末尾,而ios::out和ios::in的打开方式将会清除之前的数据。因此,文件的打开方式也很重要。 

三、对文件的操作

前面的程序你可能还会有很多地方看不懂,那么我再在前面程序的基础上完善更多功能,让你更看不懂,逐步讲解~嘻嘻

#include<iostream>
#include<fstream>
using namespace std;
int main() {
	int a[10];
	ofstream outfile("f2.dat", ios::out);//打开磁盘文件f2.dat
	if (!outfile)//如果文件没有打开
	{
		cerr << "error!" << endl;//就会报错,cerr是标准错误流,用于输出错误信息且不进入缓冲区
		exit(1);//退出程序
	}
	cout << "enter 10 integers:" << endl;
	for (int i = 0; i < 10; i++) {
		cin >> a[i];//在控制台中输入数据
		outfile << a[i] << " ";//向磁盘文件中输出
		//也就是说,这句语句的意思就是在控制台中输入一个数据就存一个数据到文件中
		//*****这个是文件中存放数据的顺序,因为只有这句是将数据保存到文件中!!
	}
	//排序算法,为了后面输出最大值,看不懂的重修大一上程序设计和计概
	for (int i = 0; i < 10; i++) {
		for (int j = i + 1; j < 10; j++) {
			if (a[i] < a[j])
				swap(a[i], a[j]);
		}
	}
	for (int i = 0; i < 10; i++) {
		cout << a[i] << " ";//在控制台上输出排序后的数组
	}
	cout << endl;
	cout << "maximum:" << a[0];//数组最大值在排序后为数组第一位
	outfile.close();//关闭文件语句
	return 0;
}

同时,也可以改变文件的打开方式,上示示例将f2.dat作为输出文件,我们也可以将其作为输入文件,从文件中读取数组到程序中:

四、练习:

有了以上的学习积淀,请你完成下面的小练习吧!

可提供的基础代码在:继承与派生类练习plus pro pax-CSDN博客

在这段代码的基础上完成下面的要求吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1806804.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JAVASE】面向对象编程综合案例--------模仿电影信息系统

需求&#xff1a; &#xff08;1&#xff09;展示系统中的全部电影&#xff08;每部电影展示&#xff1a;名称、价格&#xff09; &#xff08;2&#xff09;允许用户根据电影编号&#xff08;ID&#xff09;查询出某个电影的详细信息。 目标&#xff1a;使用所学的面向对象…

问题排查: Goalng Defer 带来的性能损耗

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作)&#xff0c;由 李兆龙 确认&#xff0c;转载请注明版权。 文章目录 引言问题背景结论 引言 性能优化之路道阻且长&#xff0c;因为脱敏规定&#xff0c;…

TinyVision V851s 使用 OpenCV + NPU 实现 Mobilenet v2 目标分类识别

用39块钱的V851se视觉开发板做了个小相机。 可以进行物品识别、自动追焦&#xff01; 这个超低成本的小相机是在V851se上移植使用全志在线开源版本的Tina Linux与OpenCV框架开启摄像头拍照捕获视频&#xff0c;并结合NPU实现Mobilenet v2目标分类识别以及运动追踪等功能......并…

Springboot整合SpringCache+redis简化缓存开发

使用步骤&#xff1a; 1.引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId> </dependency><dependency><groupId>org.springframework.boot</groupI…

定个小目标之刷LeetCode热题(14)

了解股票的都知道&#xff0c;只需要选择股票最低价格那天购入&#xff0c;在股票价格与最低价差值最大时卖出即可获取最大收益&#xff0c;总之本题只需要维护两个变量即可&#xff0c;minPrice和maxProfit&#xff0c;收益 prices[i] - minPrice,直接用代码描述如下 class …

AIRNet模型使用与代码分析(All-In-One Image Restoration Network)

AIRNet提出了一种较为简易的pipeline&#xff0c;以单一网络结构应对多种任务需求&#xff08;不同类型&#xff0c;不同程度&#xff09;。但在效果上看&#xff0c;ALL-In-One是不如One-By-One的&#xff0c;且本文方法的亮点是batch内选择patch进行对比学习。在与sota对比上…

电影制作中的版本控制:Perforce Helix Core帮助某电影短片避免灾难性文件损坏,简化艺术资产管理

Zubaida Nila是来自马来西亚的一名视觉特效师和虚拟制作研究员&#xff0c;她参加了Epic Games的一个为期六周的虚拟培训和指导项目——女性创作者计划。该计划提供了虚幻引擎工作流程的实践经验以及其他课程。Zubaida希望从中获得更多关于虚幻引擎的灯光、后期处理和特效技能方…

csrf与xss差别 别在弄乱了 直接靶场实操pikachu的csrf题 token绕过可以吗???

我们现在来说说这2个之间的关系&#xff0c;因为昨天的我也没有弄清楚这2者的关系&#xff0c;总感觉迷迷糊糊的。 xss这个漏洞是大家并不怎么陌生&#xff0c;导致xss漏洞的产生是服务器没有对用户提交数据过滤不严格&#xff0c;导致浏览器把用户输入的当作js代码返回客户端…

玉米粒计数检测数据集VOC+YOLO格式107张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;107 标注数量(xml文件个数)&#xff1a;107 标注数量(txt文件个数)&#xff1a;107 标注类别…

群体优化算法----树蛙优化算法介绍以及应用于资源分配示例

介绍 树蛙优化算法&#xff08;Tree Frog Optimization Algorithm, TFO&#xff09;是一种基于群体智能的优化算法&#xff0c;模拟了树蛙在自然环境中的跳跃和觅食行为。该算法通过模拟树蛙在树枝间的跳跃来寻找最优解&#xff0c;属于近年来发展起来的自然启发式算法的一种 …

c# iText使用

引入包 用nuget安装itext和itext.bouncy-castle-adapter包&#xff1a; 创建pdf string path "a.pdf"; PdfWriter writer new PdfWriter(path); PdfDocument pdfDoc new PdfDocument(writer); var docnew Document(pdfDoc); Paragraph p new Paragraph(&quo…

基于I2C协议的OLED显示(利用U82G库)

目录 一、实验目的 二、 U8g2下载 三、利用stm32f103的GPIO管脚、VCC和GND连接 OLED屏的I2C接口&#xff0c;采用cubemx设计一个HAL库程序框架&#xff0c;然后下载U82G源码&#xff0c;针对stm32f103和 0.96寸的I2C接口OLED屏&#xff0c;进行代码裁剪&#xff0c;然后移植到…

Fences 5 激活码 - 电脑桌面整理软件

提起桌面整理&#xff0c;经典老牌工具 Fences 必有一席之地&#xff0c;Stardock 发布了最新的 Fences 5 版本。 可以将文件和图标归类放入各个栅栏分区&#xff0c;并支持文件夹展开至桌面、分区置顶、淡化隐藏图标等功能&#xff0c;能让你的桌面焕然一新&#xff0c;不再混…

电阻十大品牌供应商

选型时选择热门的电阻品牌&#xff0c;主要是产品丰富&#xff0c;需求基本都能满足。 所所有的电路中&#xff0c;基本没有不用电阻的&#xff0c;电阻的选型需要参考阻值、精度、封装、温度范围&#xff0c;贴片/插件等参数&#xff0c;优秀的供应商如下&#xff1a; 十大电…

Cweek4+5

C语言学习 十.指针详解 6.有关函数指针的代码 代码1&#xff1a;(*(void (*)())0)(); void(*)()是函数指针类型&#xff0c;0是一个函数的地址 (void(*)())是强制转换 总的是调用0地址处的函数&#xff0c;传入参数为空 代码2&#xff1a;void (*signal(int, void(*)(int))…

系统思考—心智模式

凯恩斯说&#xff1a;“介绍新观念倒不是很难&#xff0c;难的是清除那些旧观念。”在过去的任何一年&#xff0c;如果你一次都没有推翻过自己最中意的想法&#xff0c;那么你这一年就算浪费了。旧观念像是根深蒂固的杂草&#xff0c;即使在新知识的光照下&#xff0c;也需要时…

Docker Desktop - WSL distro terminated abruptly

打开 PowerShell 或以管理员身份运行的命令提示符。运行以下命令以列出已安装的 WSL 分发&#xff1a; wsl --list 运行以下命令以注销 Docker 相关的分发 wsl --unregister <distro_name> 将<distro_name>替换为实际的 Docker 相关分发的名称。将<distro_…

模型 利特尔法则

说明&#xff1a;系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。揭示流量、存量、时间的数学关系。 1 利特尔法则的应用 1.1 银行服务系统的优化 一家银行希望优化其服务系统以减少客户的等待时间并提高服务效率。银行决定使用利特尔法则来分析和…

string经典题目(C++)

文章目录 前言一、最长回文子串1.题目解析2.算法原理3.代码编写 二、字符串相乘1.题目解析2.算法原理3.代码编写 总结 前言 一、最长回文子串 1.题目解析 给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。 示例 1&#xff1a; 输入&#xff1a;s “babad” 输出&am…

人工智能系统越来越擅长欺骗我们?

人工智能系统越来越擅长欺骗我们&#xff1f; 一波人工智能系统以他们没有被明确训练过的方式“欺骗”人类&#xff0c;通过为他们的行为提供不真实的解释&#xff0c;或者向人类用户隐瞒真相并误导他们以达到战略目的。 发表在《模式》(Patterns)杂志上的一篇综述论文总结了之…