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

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;
}

运行情况

欢迎指正与分享,谢谢!

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

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

相关文章

如何在面试IT公司时展现出色的表现

在面试IT技术岗位的过程中&#xff0c;展现出色的表现是至关重要的。下面我将分享一些我个人的经验和观察&#xff0c;希望对大家有所帮助。 首先&#xff0c;提前准备是非常重要的。在面试前&#xff0c;你应该充分了解目标公司的业务和技术需求。这样你就能更好地回答面试官…

基于Java+SpringBoot+Vue前后端分离电商项目

晚间lucky为友友们送福利啦~&#x1f381; Tips&#xff1a;有需要毕业设计指导的童鞋一定要认真看哦&#xff0c;文末有彩蛋。 一.项目介绍 该电商项目是一个简单、入门级的电商项目&#xff0c;是基于JavaSpringBootVue前后端分离项目。前端采用两套独立的系统分别完成项目…

手机的python怎么运行文件,python在手机上怎么运行

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;手机上的python怎么运行程序&#xff0c;手机的python怎么运行文件&#xff0c;今天让我们一起来看看吧&#xff01; 1、python程序怎么在手机上运行 python语言应用很广泛&#xff0c;自己也很喜欢使用它&#xff0c;其…

【机器学习】Cost Function for Logistic Regression

Cost Function for Logistic Regression 1. 平方差能否用于逻辑回归&#xff1f;2. 逻辑损失函数loss3. 损失函数cost附录 导入所需的库 import numpy as np %matplotlib widget import matplotlib.pyplot as plt from plt_logistic_loss import plt_logistic_cost, plt_two_…

【自动化剧本】Role角色

目录 一、Roles模块1.1roles的目录结构1.2roles 内各目录含义解释1.3在一个 playbook 中使用 roles 的步骤 二、使用Role编写LNMP剧本2.1 搭建Nginx角色2.2搭建Mysql角色2.3搭建php角色2.4lnmp剧本 一、Roles模块 roles用于层次性、结构化地组织playbook。roles能够根据层次型结…

vue基础-虚拟dom

vue基础-虚拟dom 1、真实dom目标2、虚拟dom目标 1、真实dom目标 在真实的document对象上&#xff0c;渲染到浏览器上显示的标签。 2、虚拟dom目标 本质是保存节点信息、属性和内容的一个JS对象 更新会监听变化的部分 给真实的DOM打补丁

vue 表单form-item模板(编辑,查看,新建)

目录 formatFormData 后端数据格式​编辑 JSON解析和生成 加载&#xff08;请求前&#xff0c;await后&#xff09; formComp formatFormData 后端数据格式 为空的&#xff0c;可以直接不提交/提交null/undefined JSON解析和生成 var str {"name": "…

容斥原理 训练笔记

​ 容斥原理 设S是一个有限集&#xff0c;A_1,A_2…A_n是S的n个子集&#xff0c;则 ∣ S − ⋃ i 1 n A i ∣ ∑ i 0 n ( − 1 ) i ∑ 1 ≤ j 1 < j 2 . . . < j i ≤ n ∣ ⋂ k 1 i A j k ∣ |S-\bigcup_{i1}^{n}A_i|\sum_{i0}^{n}(-1)^i\sum_{1\leq j_1< j_2.…

windows如何上架ios应用到app store

Application Uploader iOS App上架工具是一款非常好用的针对iOS苹果应用程序软件开发的实用编程工具&#xff0c;它的主要作用是帮助用户进行快速的程序应用设计和程序应用调试&#xff0c;节省用户进行软件开发耗费的不必要时间&#xff01; ​ 编辑切换为居中 添加图片注释&…

Minecraft 1.20.x Forge模组开发 05.矿石生成

我们本次尝试在主世界生成模组中自定义的矿石 效果演示 效果演示 效果演示 1.由于1.20的版本出现了深板岩层的矿石,我们要在BlockInit类中声明一个矿石的两种岩层形态: BlockInit.java package com.joy187.re8joymod.init;import java.util.function.Function;import java…

数据可视化(5)热力图及箱型图

1.热力图 #基本热力图 #imshow&#xff08;x&#xff09; #x&#xff0c;数据 x[[1,2],[3,4],[5,6],[7,8],[9,10]] plt.imshow(x) plt.show() #使用热力图分析学生的成绩 dfpd.read_excel(学生成绩表.xlsx) #:表示行号 截取数学到英语的列数 xdf.loc[:,"数学":英语].…

操作系统专栏2-文件系统from小林coding

文件系统 文件系统构成虚拟文件系统文件的使用文件的存储连续存储非连续空间存放方式链表方式索引方式 Linux文件的实现方式 空闲分区的管理文件系统结构目录的存储软链接和硬链接 文件系统构成 Linux的设计哲学有一点很重要:一切皆文件,不仅仅是普通的文件和目录,就连块设备,…

六、代理模式

文章目录 一、代理模式1、代理模式的好处和缺点1.1 代理模式理解加深 一、代理模式 为什么要学习代理模式&#xff1f; 代理模式是Spring AOP 以及 Spring MVC 的底层&#xff01;&#xff01;并且还是 JAVA 的23种设计模式之一&#xff01;&#xff01; 代理模式的分类&#…

C++ | 哈希表的实现与unordered_set/unordered_map的封装

目录 前言 一、哈希 1、哈希的概念 2、哈希函数 &#xff08;1&#xff09;直接定址法 &#xff08;2&#xff09;除留余数法 &#xff08;3&#xff09;平方取中法&#xff08;了解&#xff09; &#xff08;4&#xff09;随机数法&#xff08;了解&#xff09; 3、哈…

Nginx解决文件服务器文件名显示不全的问题

Nginx可以搭建Http文件服务器&#xff0c;但默认的搭建会长文件名显示不全&#xff0c;比如如下&#xff1a; 问题&#xff1a;显示不全&#xff0c;出现...&#xff0c;需要进行解决 这里使用重新编绎nginx的方式&#xff0c;见此文&#xff1a; https://unix.stackexchange…

刷题笔记 day4

力扣 611 有效三角形的个数 首先需要知道如何判断 三个数是否能构成三角形。 假如 存在三个数 a < b < c&#xff0c;如果要构成三角形&#xff0c;需要满足&#xff1a; ab > c ; a c > b ; b c > a ; 任意两个数大于第三个数就可构成三角形。 其实不难…

网络编程 IO多路复用 [select版] (TCP网络聊天室)

//head.h 头文件 //TcpGrpSer.c 服务器端 //TcpGrpUsr.c 客户端 select函数 功能&#xff1a;阻塞函数&#xff0c;让内核去监测集合中的文件描述符是否准备就绪&#xff0c;若准备就绪则解除阻塞。 原型&#xff1a; #include <sys/select.…

Codeforces Round 889 (Div. 2)(视频讲解A——D)

文章目录 A Dalton the TeacherB Longest Divisors IntervalC2 Dual (hard Version)D Earn or Unlock Codeforces Round 889 (Div. 2)&#xff08;视频讲解A——D&#xff09; A Dalton the Teacher #include<bits/stdc.h> #define endl \n #define INF 0x3f3f3f3f us…

设计模式大白话——装饰者模式

装饰者模式 文章目录 装饰者模式一、概述二、应用场景三、代码示例四、小结 一、概述 ​ 装饰者模式&#xff0c;此模式最核心之处在于装饰二字&#xff0c;之所以需要装饰&#xff0c;是因为基础的功能无法满足需求&#xff0c;并且装饰是临时的&#xff0c;并不是永久的&…

idea调节文字大小、日志颜色、git改动信息

idea调节菜单栏文字大小&#xff1a; 调节代码文字大小&#xff1a; 按住ctrl滚动滑轮可以调节代码文字大小&#xff1a; 单击文件即可在主窗口上打开显示&#xff1a; idea在控制台对不同级别的日志打印不同颜色 &#xff1a; “grep console”插件 点击某一行的时候&#x…