【C++】文件操作(囊括特殊情况:读文件遇到的空格被跳过、“文件只读一次“)

news2024/9/25 11:12:20

author:&Carlton

tag:C++

topic:【C++】文件操作(囊括特殊情况:读文件遇到的空格被跳过、“文件只读一次”)

website:黑马程序员C++

date:2023年7月31日


目录

文本文件

写文件

源代码        

文件情况

读文件

源代码

运行结果

二进制文件

写文件

源代码

文件情况

读文件

源代码

运行情况


文本文件

写文件

        1.引用文件操作头文件

        2.创建只写文件流对象

        3.打开文件并指定打开方式

        4.写数据

        5.关闭文件

源代码        

#include <iostream>
//1.引用文件操作头文件
#include <fstream>
using namespace std;

void test01()
{
	//2.创建只写文件流对象
	ofstream ofs;

	//3.打开文件并指定打开方式
	ofs.open("text.txt", ios::out);

	//4.写数据
	ofs << "姓名: 张三" << endl;
	ofs << "性别: 男" << endl;
	ofs << "年龄: 18岁" << endl;

	//5.关闭文件
	ofs.close();
}


int main()
{
	test01();
	return 0;
}

文件情况

        (保存在源文件所在同一最低级文件夹下)

        注意:冒号和文字间有空格

读文件

exit()函数与return()函数区别

        exit() 函数接受一个整数参数 status,表示程序的终止状态。一般来说,程序正常终止时可以返回 0,表示成功执行。其他非零的状态码可以用来表示不同的错误或异常情况


        调用 exit() 函数会立即终止程序的执行,并且不会执行之后的任何代码。它会执行一些清理工作(如关闭文件、释放内存等)后,直接返回操作系统

        需要注意的是,使用 exit() 函数会跳过析构函数的调用,因此可能导致一些资源没有被正确释放。在正常情况下,我们应该使用 return 语句来终止函数或程序,以保证资源的正确释放。 exit() 函数通常用于在出现严重错误或异常情况下终止程序。

源代码

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

void test01()
{
	ifstream ifs;

	ifs.open("text.txt", ios::in);
	if (!ifs.is_open())
	{
		cout << "文件打开失败!" << endl;
		return;
		//或者使用exit(1);
/*
	exit() 函数接受一个整数参数 status,表示程序的终止状态。一般来说,程序正常终止时可以返回 0,表示成功执行。其他非零的状态码可以用来表示不同的错误或异常情况。
	调用 exit() 函数会立即终止程序的执行,并且不会执行之后的任何代码。它会执行一些清理工作(如关闭文件、释放内存等)后,直接返回操作系统。
	需要注意的是,使用 exit() 函数会跳过析构函数的调用,因此可能导致一些资源没有被正确释放。在正常情况下,我们应该使用 return 语句来终止函数或程序,以保证资源的正确释放。 exit() 函数通常用于在出现严重错误或异常情况下终止程序。
*/
	}

	//读文件
	
	//第一种方式
    //空格被当作字符串结束标志,单次循环结束,打印换行。        
	char buf1[1024] = { 0 };
	while (ifs >> buf1)
	{
		cout << buf1 << endl;
	}

	//第二种方式
    //以换行符为字符串结束标志(空格可以作为有效字符存在)
	char buf2[1024] = { 0 };
	while (ifs.getline(buf2, sizeof(buf2)))
	{
		cout << buf2 << endl;
	}

	//第三种方式
    //以换行符为字符串结束标志(空格可以作为有效字符存在)
	string buf3;
	while (getline(ifs,buf3))
	{
		cout << buf3 << endl;
	}

	//第四种方式
    //以换行符为字符串结束标志(空格可以作为有效字符存在)
	char c;
	while ((c = ifs.get()) != EOF)
	{
		cout << c;
	}

	ifs.close();
}

int main()
{
	test01();
	return 0;
}

运行结果

第一种读文件方式:

        空格被当作字符串结束标志,单次循环结束,打印换行。        

 其他方式:

        以换行符为字符串结束标志(空格可以作为有效字符存在)

        另外注意到四种读文件方式都执行但“文件只读一次”,因为文件位置标识符没有更新到文件开头。

二进制文件

写文件

源代码

#include <iostream>
#include <fstream>
using namespace std;

class Person
{
public:
	char m_name[50];
	int m_age;
};

void test01()
{
	Person p = {"张三",18};
	ofstream ofs;
	ofs.open("person.txt", ios::out | ios::binary);
	ofs.write((const char*) & p,sizeof(p));
	ofs.close();
}

int main()
{
	test01();
	return 0;
}

文件情况

读文件

源代码

#include <iostream>
#include <fstream>
using namespace std;

class Person
{
public:
	char m_name[50];
	int m_age;
};

void test01()
{
	ifstream ifs;
	ifs.open("person.txt", ios::in | ios::binary);
	if (!ifs.is_open())
	{
		cout << "文件打开失败!" << endl;
		return;
	}
	Person p;
	ifs.read((char*)&p, sizeof(p));
	cout << "姓名:" << p.m_name << endl;
	cout << "年龄:" << p.m_age << endl;
	ifs.close();
}

int main()
{
	test01();
	return 0;
}

运行情况

欢迎指正与分享,谢谢!

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

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

相关文章

二叉搜索树的模拟实现

基础的二叉树用的其实不多&#xff0c;二叉树的重点在二叉树的延伸&#xff1a;二叉搜索树。二叉搜索树又延伸出了平衡二叉搜索树。搜索数的特点是&#xff1a;查找效率极高。 二叉搜索树的作用&#xff1a; 1. map和set特性需要先铺垫二叉搜索树&#xff0c;而二叉搜索树也是一…

3节点linux服务器集群搭建

一&#xff0c;目的 由于当前集群部署已经成为主流&#xff0c;适当研究一些集群部署的基本操作&#xff0c;有助于后续像k8s集群、doris集群的部署。 大部分集群都是一主两从这种三节点配置。故本文也是采用三节点完成相关学习和记录。 二&#xff0c;说明 因为会关闭防火…

webScoket

webScoket是什么&#xff1f; 支持端对端通讯可以由客户端发起&#xff0c;也可以有服务端发起用于消息通知、直播间讨论区、聊天室、协同编辑等 做一个简单的webScoket 客户端配置&#xff1a; 1、新建一个页面叫web-scoket.html <!DOCTYPE html> <html lang"…

P7243 最大公约数

题目 思路 利用曼哈顿原理求离&#xff08;x&#xff0c;y&#xff09;最远的点 代码 #include<bits/stdc.h> using namespace std; #define int long long #define INF 0x3f3f3f3f const int maxn2005; int gcd(int a,int b) { return b?gcd(b,a%b):a; } int n,m; i…

华为OD机试真题 JavaScript 实现【输入整型数组和排序标识,对其元素按照升序或降序进行排序】【牛客练习题】

目录 一、题目描述二、输入描述三、输出描述四、解题思路五、JavaScript算法源码 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试&#xff0c;发现新题目&#x…

RK3566 使能NPU

一、硬件 确定VDD_NPU所用的电源 用的是PMIC的DC-DC2 二、SDK 1、修改板级配置DTS文件 配置vdd_gpu vdd_gpu: DCDC_REG2 {regulator-always-on;regulator-boot-on;regulator-min-microvolt <500000>;regulator-max-microvolt <1350000>;regulator-init-microv…

[threejs]相机与坐标

搞清相机和坐标的关系在threejs初期很重要&#xff0c;否则有可能会出现写了代码&#xff0c;运行时一片漆黑的现象&#xff0c;这种情况就有可能是因为你相机没弄对。 先来看一下threejs中的坐标(世界坐标) 坐标轴好理解&#xff0c;大家只需要知道在three中不同颜色代表的轴…

python-pytorch基础之cifar10数据集使用图片分类

这里写目录标题 总体思路获取数据集下载cifar10数据解压包文件介绍加载图片数字化信息查看数据信息数据读取自定义dataset使用loader加载建模训练测试建测试数据的loader测试准确性测试一张图片读取一张图片加载模型预测图片类型创建一个预测函数随便来张马的图片结果其他打开一…

java实现钉钉群机器人@机器人获取信息后,机器人回复

1.需求 鉴于需要使用钉钉群机器人回复&#xff0c;人们提出的问题&#xff0c;需要识别提出的问题中的关键词&#xff0c;后端进行处理实现对应的业务逻辑 2.实现方式 用户群机器人&#xff0c;附带提出的问题&#xff0c;后端接收消息后识别消息内容&#xff0c;读取到关键…

亚马逊、虾皮、Lazada、速卖通、阿里国际等跨境电商平台怎么获取优质评价?

在跨境电商平台上&#xff0c;产品的评价直接影响卖家账户的评定因素&#xff0c;同时也影响产品页面的曝光量和流量&#xff0c;从而对产品销量产生影响&#xff0c;因此&#xff0c;产品评价的重要性不言而喻&#xff0c;除了产品的图片、描述、详情、广告和站外推广&#xf…

Java throw和throws 关键字

在Java中&#xff0c;异常可以分为两种类型&#xff1a; 未检查的异常&#xff1a;它们不是在编译时而是在运行时被检查&#xff0c;例如&#xff1a;ArithmeticException&#xff0c;NullPointerException&#xff0c;ArrayIndexOutOfBoundsException&#xff0c;Error类下的异…

[Docker实现测试部署CI/CD----相关服务器的安装配置(2)]

目录 6、Jenkins安装配置安装jdk安装maven拉取镜像启动jenkins修改数据卷权限浏览器访问安装插件配置jenkins移动JDK和Maven配置JDK和Maven 6、Jenkins安装配置 Jenkins 是一个开源软件项目&#xff0c;是基于 Java 开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&…

MySQL 的解析器以及 MySQL8.0 做出的改进 | StoneDB技术分享 #2

设计&#xff1a;小艾 审核&#xff1a;丁奇 编辑&#xff1a;宇亭 作者&#xff1a;柳湛宇&#xff08;花名&#xff1a;乌淄&#xff09; 浙江大学-软件工程-在读硕士、StoneDB 内核研发实习生 一、MySQL 的解析器 MySQL 所使用的解析器&#xff08;即 Lexer 和 Parser …

⛳ Java多线程 一,线程基础

线程基础 ⛳ Java多线程 一&#xff0c;线程基础&#x1f43e; 一&#xff0c;线程基础&#x1f4ad; 1.1&#xff0c;什么是程序&#xff0c;进程&#xff0c;线程&#x1f3ed; 1.2&#xff0c;什么是并行和并发&#x1f463; 1.3&#xff0c;线程使用的场景&#x1f3a8; 1.…

Nginx 15分钟入门

1、反向代理和负载均衡 Nginx 反向代理 负载均衡 网站初期用户量较少的时候&#xff0c;一台服务器就够用&#xff0c;但是当大量用户注册&#xff0c;那么显然一台机器就不够了。如下图&#xff0c;我们把同一个项目部署在3台服务器上。那么问题又来了&#xff0c;用户A的请…

连锁门店新零售管理系统服务商,提供新零售商城一体化解决方案|亿发

新零售时代&#xff0c;客户需求和购物方式正在发生翻天覆地的变化&#xff0c;数字化运营服务成为连锁门店增强竞争力的有效工具。那么&#xff0c;我们该如何借助数字化力量&#xff0c;升级连锁门店的新零售运营服务&#xff0c;迎接未来的商业挑战呢&#xff1f;一、智慧新…

emWin - BMP图片显示

BmpCvt.exe 用途 利用BMP图片&#xff0c;进行GUI显示&#xff1b;ICON等图标都是小BMP图片&#xff0c;核心是将BMP图片&#xff0c;转成emWin支持的方式&#xff0c;最终显示到TFT屏上 使用BmpCvt.exe工具&#xff0c;将各个图片转成相应的C文件. emWin有关的工具&#xff…

P4780 Phi的反函数

题目 思路 φ(x)n 当指数均为1时n最小 证明&#xff1a;容斥原理 代码 #include<bits/stdc.h> using namespace std; #define int long long const int maxn1e9; int ansINT_MAX,n; bool f; map<int,bool> mp; bool is_prime(int n){if(n<1) return false;fo…

Web功能测试之表单、搜索测试

初入职场接触功能测试老是碰到以下情况不知道怎么写测试用例&#xff1a; 一个界面很多搜索条件怎么写用例&#xff1f; 下拉框测试如何考虑测试点&#xff1f; 上传要考虑哪些验证点&#xff1f;...... 所以这篇主要是整理关于web测试之表单、搜索测试的相关要点。 一、表…

个性定义轻松掌控,更适合PC玩家的游戏鼠标,雷柏VT350S体验

喜欢玩PC游戏的玩家都知道&#xff0c;一款好的鼠标可以在游戏中更加游刃有余&#xff0c;甚至扭转乾坤。但是&#xff0c;有线鼠标总是让人觉得不够灵活&#xff0c;无线鼠标又担心延迟和续航。那么&#xff0c;有没有一款无线鼠标既能满足游戏需求&#xff0c;操作又能随心所…