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

姚老师小课堂开课啦!

一、文件的分类:

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.mfbz.cn/a/695054.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

逆市创新高!水电“双雄“是怎样炼成的? 博通,赢麻了!

高分红夏季用电高峰AI的尽头是电力 6月7日&#xff0c;长江电力&#xff08;600900&#xff09;、华能水电&#xff08;600025&#xff09;股价双双上涨。截至收盘&#xff0c;长江电力股价上涨1%&#xff0c;收于28.31元/股&#xff1b;华能水电股价上涨1.52%&#xff0c;收于…

sqli-labs 靶场 less-8、9、10 第八关到第十关详解:布尔注入,时间注入

SQLi-Labs是一个用于学习和练习SQL注入漏洞的开源应用程序。通过它&#xff0c;我们可以学习如何识别和利用不同类型的SQL注入漏洞&#xff0c;并了解如何修复和防范这些漏洞。Less 8 SQLI DUMB SERIES-8判断注入点 当输入id为1时正常显示&#xff1a; 加上单引号就报错了 …

Kafka 架构

1 整体架构 1.1 Zookeeper Zookeeper 是一个分布式协调服务&#xff0c;用于管理 Kafka 的元数据。它负责维护 Kafka 集群的配置信息、Broker 列表和分区的 Leader 信息。 Zookeeper 确保了 Kafka 集群的高可用性和可靠性。 但 Zookeeper 已经成为 Kafka 性能瓶颈&#xff0c;…

什么是 AOF 重写?AOF 重写机制的流程是什么?

引言&#xff1a;在Redis中&#xff0c;持久化是确保数据持久性和可恢复性的重要机制之一。除了常见的RDB&#xff08;Redis Database&#xff09;持久化方式外&#xff0c;AOF&#xff08;Append Only File&#xff09;也是一种常用的持久化方式。AOF持久化通过记录Redis服务器…

基于xml的Spring应用(理解spring注入)

目录 问题&#xff1a; 传统Javaweb开发的困惑? 问题&#xff1a; IOC、DI和AOP的思想提出 问题&#xff1a; Spring框架的诞生 1. BeanFactory快速入门 2. ApplicationContext快速入门 3. BeanFactory和ApplicationContext的关系 基于xml的Spring应用 1. SpringBean的…

Mamba v2诞生:3 SMA与Mamba-2

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;则提…

312. 戳气球 Hard

有 n 个气球&#xff0c;编号为0 到 n - 1&#xff0c;每个气球上都标有一个数字&#xff0c;这些数字存在数组 nums 中。 现在要求你戳破所有的气球。戳破第 i 个气球&#xff0c;你可以获得 nums[i - 1] * nums[i] * nums[i 1] 枚硬币。 这里的 i - 1 和 i 1 代表和 i 相邻…

JDK17 | Windows环境配置

众所周知&#xff0c; Jdk8做了很大的提升&#xff0c;网上的访谈&#xff0c;问到当下程序员要不要升级JDK版本的时候&#xff0c;得到异口同声的答案&#xff0c;不需要。这么多年过去了&#xff0c;数据是不会骗人的&#xff0c;现在Star最多的是JDK17&#xff0c;今天&…

STM32中ADC在cubemx基础配置界面介绍

ADCx的引脚,对应的不同I/O口&#xff0c;可以复用。 Temperature :温度传感器通道。 Vrefint :内部参照电压。 Conversion Trigger: 转换触发器。 IN0 至 IN15,是1ADC1的16个外部通道。本示例中输出连接的是ADC2的IN5通道&#xff0c;所以只勾选IN5.Temperature Sensor Cha…

搭建自己的组件库<2>dialog 组件

目录 设置title 插槽显示 控制宽高 关闭对话框 transition实现动画 引入深度选择器 同样创建组件dialogue.vue后全局注册 dialogue模版&#xff1a; <template><!-- 对话框的遮罩 --><div class"miao-dialog_wrapper"><!-- 真的对话框 …

python如何输入回车

Python默认遇到回车的时候&#xff0c;输入结束。所以我们需要更改这个提示符&#xff0c;在遇到空行的时候&#xff0c;输入才结束。 raw_input就是从标注输入读取输入&#xff0c;输入的是什么就是什么。 文档解释&#xff1a; The function then reads a line from input,…

debian系统apt 国内安装源

debian系统apt 国内安装源&#xff1a; 国内阿里镜像源&#xff1a; deb http://mirrors.aliyun.com/debian stable main non-free contrib deb-src http://mirrors.aliyun.com/debian stable main non-free contrib 打开源文件位置&#xff1a;/etc/apt/sources.list,原来的内…

《经典图论算法》广度优先搜索

摘要&#xff1a; 1&#xff0c;广度优先搜索介绍 2&#xff0c;广度优先搜索的解题步骤 3&#xff0c;广度优先搜索的代码实现 1&#xff0c;广度优先搜索介绍 广度优先搜索(Breadth-first search&#xff0c;BFS)&#xff0c;又称宽度优先搜索&#xff0c;简单的说&#xff0…

知识工作者如何在工作中使用大模型?

自 2022 年 11 月 OpenAI 发布 ChatGPT 以来&#xff0c;人们对生成式人工智能&#xff08;GenAI&#xff0c;以下简称“生成式AI”&#xff09;的兴趣激增&#xff0c;同时也对其安全性表示担忧。 &#xff08;译者注&#xff1a;生成式人工智能&#xff0c;即用 AI 生成文本…

大模型常用推理参数工作原理

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 do_sample do_sample 参数控制是否使用采样…

QQ号码采集软件

寅甲QQ号码采集软件, 一款采集QQ号、QQ邮件地址&#xff0c;采集QQ群成员、QQ好友的软件。可以按关键词采集&#xff0c;如可以按地区、年龄、血型、生日、职业等采集。采集速度非常快且操作很简单。

抽象的java入门1.3.2

前言&#xff1a; 全新版本的函数&#xff08;方法&#xff09;定义&#xff0c;更简单 1.优化了验证过程&#xff0c;直击本质 2.新增目前一图流 正片&#xff1a; 函数的结构可以分为三部分&#xff1a;函数名&#xff0c;参数&#xff0c;函数体 一生二&#xff0c;二生…

扩散模型Stable Diffusion

扩散模型构成 Text Encoder(CLIPText) Clip Text为文本编码器。以77 token为输入&#xff0c;输出为77 token 嵌入向量&#xff0c;每个向量有768维度。 Diffusion(UNetScheduler) 在潜在空间中逐步处理扩散信息。以文本嵌入向量和由噪声组成的起始多维数组为输入&#xff0c…

gcc源码分析 词法和语法分析

gcc源码分析 词法和语法分析 一、输入参数相关1、命令行到gcc二、词法与语法分析1、词法分析1.1 struct cpp_reader1.2 struct tokenrun/struct cpp_token/lookahead字段1.3 struct ht2.1 语法符号相关的结构体c_token定义如下:2.2在语法分析中实际上有多个API组成了其接口函数…

产品成功的关键:构建高效运作的系统

在如今竞争激烈的市场环境中&#xff0c;一个产品要想脱颖而出&#xff0c;不仅仅需要独特的创意和优质的功能&#xff0c;更需要建立一套高效运作的系统。这个系统包括结果的具体化、达成路径的明确以及持续执行迭代并形成习惯等多个环节。下面&#xff0c;我们将结合具体的案…