【32】C++流

C++流

IO: 向设备输入数据和输出数据

C++的IO流

设备: 

  1. 文件
  2. 控制台
  3. 特定的数据类型(stringstream)

c++中,必须通过特定的已经定义好的类, 来处理IO(输入输出)

读写文件:文件流

文件流: 对文件进行读写操作

头文件:  <fstream>

类库:

   ifstream    对文件输入(读文件)

   ofstream    对文件输出(写文件)

   fstream     对文件输入或输出

对文本文件流读写 

文件打开方式:

以上打开方式, 可以使用位操作 |  组合起来

写文本文件

(自编代码)

#include <fstream>
#include <iostream>
#include <string>using namespace std;int main(void) {ofstream writefile;writefile.open("flie.txt");string name;int age;while (1) {cout << "please input your name:[Ctrl+z exit]";cin >> name;if (cin.eof()) {break;}writefile << name << "\t";cout << "please input your age:";cin >> age;writefile << age << endl;}writefile.close();system("pause");return 0;
}

读文本文件

#include <fstream>
#include <iostream>
#include <string>using namespace std;int main(void) {ifstream outfile;outfile.open("flie.txt");string name;int age;while (1) {outfile >> name;if (outfile.eof()) {break;}cout << name << "\t";outfile >> age;cout << age << endl;}outfile.close();system("pause");return 0;
}

对二进制文件流读写

思考:

文本文件和二进制文件的区别?

文本文件: 写数字1,  实际写入的是 ‘1’

二进制文件:写数字1, 实际写入的是  整数1(4个字节,最低字节是1, 高3个字节都是0)

                     写字符‘R’实际输入的还是‘R’

写二进制文件

使用文件流对象的write方法写入二进制数据.

#include <fstream>
#include <iostream>
#include <string>using namespace std;int main(void) {ofstream bitWriteFile;bitWriteFile.open("flie.bat");string name;int age;while (1) {cout << "please input your name [Ctrl+z exit] :";cin >> name;if (cin.eof()) {break;}bitWriteFile << name << "\t";cout << "please input your age :";cin >> age;bitWriteFile.write((char*)&age, sizeof(age));}bitWriteFile.close();system("pause");return 0;
}
bitWriteFile.write((char*)&age, sizeof(age));

这行代码是在C++程序中将一个整数 `age` 以二进制形式写入到文件中的操作。让我们详细解释一下这行代码的各个部分:

1. `bitWriteFile`:这是一个 `ofstream` 类型的对象,它是C++标准库中的一个类,用于提供对文件的输出功能。

2. `.write`:这是 `ofstream` 对象的一个成员函数,用于写入数据。`.write` 函数接受两个参数:第一个参数是一个指向要写入数据的指针,第二个参数是要写入的数据的大小(以字符为单位)。

3. `(char*)&age`:这是一个类型转换操作,它将整数 `age` 的地址转换为一个 `char*` 类型的指针。这样做的原因是 `.write` 函数需要一个指向字符数据的指针。由于C++中的类型安全性,直接传递一个整数的地址是不合法的,因此需要将其转换为 `char*` 类型。`&age` 获取 `age` 变量的内存地址,然后通过强制类型转换 `(char*)`,告诉编译器将这个地址当作字符数组的首地址来处理。

4. `sizeof(age)`:这是一个编译时运算符,它返回变量 `age` 所占的字节数。对于一个 `int` 类型的变量,`sizeof(age)` 通常返回 4(在32位系统中)或 8(在64位系统中),这取决于编译器和操作系统的架构。这个值告诉 `.write` 函数需要写入多少字节的数据。

综合起来,`bitWriteFile.write((char*)&age, sizeof(age));` 这行代码的作用是以二进制形式将 `age` 变量的内容写入到 `bitWriteFile` 指定的文件中。这种方式写入的数据不是以文本形式存储的,而是直接存储 `age` 变量在内存中的二进制表示。这意味着,如果你在不同的机器或不同的编译器上读取这个文件,可能会遇到字节序(endianness)或整数大小不一致的问题,导致读取的值不正确。因此,使用二进制文件进行数据交换时,需要确保写入和读取数据的系统环境是兼容的。

 读二进制文件

#include <fstream>
#include <iostream>
#include <string>using namespace std;int main(void) {ifstream bitOutFile;bitOutFile.open("flie.bat", ios::in | ios::binary);string name;int age;while (1) {bitOutFile >> name;if (bitOutFile.eof()) {break;}cout << name << "\t";char temp;bitOutFile.read((char*)&temp,sizeof(temp));bitOutFile.read((char*)&age, sizeof(age));cout << age << endl;}bitOutFile.close();system("pause");return 0;
}

 对文件流按格式读写取数据

使用stringstream

按指定格式写文件

#include <fstream>
#include <iostream>
#include <string>
#include <sstream>using namespace std;int main()
{string name;int age;ofstream outfile;outfile.open("file.txt", ios::out | ios::trunc);while (1) {cout << "请输入姓名: [ctrl+z退出] ";cin >> name;if (cin.eof()) { //判断文件是否结束break;}cout << "请输入年龄: ";cin >> age;stringstream s;s << "name:" << name << "\t\tage:" << age << endl;outfile << s.str();}// 关闭打开的文件outfile.close();system("pause");return 0;
}

按指定格式读文件

#include <fstream>
#include <iostream>
#include <string>
#include <sstream>
#include <Windows.h>using namespace std;int main(void)
{char name[32];int age;string line;ifstream infile;infile.open("file1.txt");while (1) {getline(infile, line);if (infile.eof()) { //判断文件是否结束break;}sscanf_s(line.c_str(), "name:%s\t\tage:%d", name, sizeof(name), &age);cout << "姓名:" << name << "\t\t年龄:" << age << endl;}infile.close();system("pause");return 0;
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#基础知识-枚举

目录 枚举 1.分类 1.1普通枚举 1&#xff09;默认情况 2&#xff09;指定起始值 1.2标志枚举&#xff08;Flag Enum&#xff09; 位运算符与标志枚举 1&#xff09;组合标志 2&#xff09;检查标志 2.枚举与不同类型之间的转换 1&#xff09;枚举->整型 2&#…

深度学习调参大法

目录 trick 1&#xff1a;深度学习调参核心点trick 2&#xff1a;关于 深度学习Model选型问题trick 3&#xff1a;关于数据trick 4&#xff1a;关于调参 4.1 关于 Loss function 调参策略4.2 关于 Learning rate 和 batch size 调参策略4.3 关于 Epoch number 和 early stoppi…

数据结构模板代码合集(不完整)

P3368 【模板】树状数组 2 #include <bits/stdc.h> using namespace std; const int maxn 5e5 7;int n, m, s, t; int ans; int a[maxn]; struct node{int l, r;int num; }tr[maxn * 4];void build(int p, int l, int r){tr[p] {l, r, 0};if(l r){tr[p].num a[l];r…

TCP全连接队列与 tcpdump 抓包

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;计算机网络高效通关之路 欢迎大家点赞收藏评论&#x1f60a; 目录 listen第二个参数详解 全连接队列与半连接队列半开放连接队列&#xff08;SYN队列&#xff09;全连接队列&#xff08;接受队列…

【MySQL】C语言连接MySQL数据库3——事务操作和错误处理API

目录 1.MySQL事务处理机制 1.1.autocommit 1.2.autocommit的设置与查看 1.3.使用示例 2.事务操作API 2.1.设置事务提交模式——mysql_autocommit() 2.2.提交事务——mysql_commit() 2.3.事务回滚——mysql_rollback() 3.错误处理的API 3.1.返回错误的描述——mysql_er…

15.6 JDBC数据库编程6——可滚动和可更新的ResultSet

目录 15.6 引言 15.6.1 可滚动的ResultSet 15.6.1 可更新的ResultSet 15.6 引言 可滚动的ResultSet是指在结果集对象上不但可以向前访问结果集中的记录&#xff0c;还可以向后访问结果集中记录。可更新的ResultSet是指不但可以访问结果集中的记录&#xff0c;还可以更新…

关于移动硬盘复制文件0x80071AC3错误解决方法

一、问题详情 新入手的西部数据移动硬盘在复制文件到手机是没有问题的&#xff0c;但是在电脑复制文件的时候&#xff0c;电脑弹出0x80071AC3错误&#xff0c;没办法复制文件&#xff0c;也没办法新建文件夹。 二、原因 因为卷有问题&#xff0c;请运行chkdsk并重试。 三、解…

使用Vue.js构建响应式Web应用

&#x1f496; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4bb; Gitee主页&#xff1a;瑕疵的gitee主页 &#x1f680; 文章专栏&#xff1a;《热点资讯》 使用Vue.js构建响应式Web应用 1 引言 2 Vue.js简介 3 安装Vue CLI 4 创建Vue项目 5 设计应用结构 6 创建组件 7 使用…

SLAM|1. 相机投影及相机畸变

一个能思考的人&#xff0c;才真是一个力量无边的人。——巴尔扎克 本章主要内容&#xff1a; 1.针孔相机模型 2.相机成像的几个坐标系图像 3.畸变及相机标定 本节主要介绍在照相机拍摄过程中&#xff0c;现实物体如何跟照片上的像素关联起来&#xff0c;具体涉及相机成像的物…

LabVIEW换流变换器智能巡检系统

基于LabVIEW的换流变换器智能巡检系统通过自动化检测和数据分析&#xff0c;提高换流变换器的运行效率和可靠性&#xff0c;降低人工维护成本。 项目背景&#xff1a; 换流变压器作为电力系统的重要组成部分&#xff0c;其性能的可靠性直接影响到整个电网的稳定运行。然而&…

Spring Boot:植物健康的智能守护者

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

Python基于amazon/chronos-t5-base的预训练模型离线对时间系列数据的未来进行预测

Python基于预训练模型对时间系列数据的未来进行预测 导入库 %matplotlib inline import matplotlib.pyplot as plt import numpy as np import pandas as pd import torch from chronos import ChronosPipeline from tqdm.auto import tqdm from autogluon.timeseries import…

【Java】使用iText依赖生成PDF文件

文章目录 使用iText实现PDF文件生成1. 需求2 . 添加依赖3. 核心4. 实战案例&#xff1a;生成录用通知书4.1 整体架构4.2 初始化PDF文档4.3 配置中文字体4.4 添加背景图片4.5 添加文本内容4.6 处理文档生成 5. 关键技巧与注意事项5.1 字体处理5.2 图片处理5.3 布局控制5.4 异常处…

探索人工智能在自然语言处理中的应用

探索人工智能在自然语言处理中的应用 前言1. 机器翻译2. 情感分析3. 智能客服4. 文本生成未来展望 结语 前言 在信息爆炸的时代&#xff0c;自然语言处理&#xff08;NLP&#xff09;作为人工智能&#xff08;AI&#xff09;的一个重要分支&#xff0c;正以前所未有的速度改变着…

LabVIEW提高开发效率技巧----节省内存

在LabVIEW开发过程中&#xff0c;内存管理是保障程序稳定性和性能的关键。本文将详细介绍如何通过队列处理来节省内存&#xff0c;尤其是如何通过解耦释放不再需要的数据&#xff0c;防止内存泄漏。通过多个实际例子&#xff0c;从不同角度探讨队列处理在大数据量或长时间运行的…

苹果瑕疵数据集苹果质量数据集YOLO格式VOC格式 深度学习 目标检测 数据集

一、数据集概述 数据集名称&#xff1a;2类苹果图像数据集 数据集包含两类样本&#xff1a;正常苹果和有瑕疵的苹果。正常苹果样本代表完好的苹果&#xff0c;而有瑕疵的苹果样本代表苹果表面可能存在的损伤、瑕疵或病害。每个样本都经过详细标记和描述&#xff0c;以便训练模…

大语言模型数据类型与环境配置

文章目录 前言一、环境安装二、大语言模型数据类型1、基本文本指令数据类型2、数学指令数据类型3、几何图形指令数据类型4、多模态指令数据类型5、翻译指令数据类型 三、vscode配置 前言 简单给出环境安装与数据类型及vscode运行配置&#xff0c;其中vscode运行配置是便于我们…

专业135+总分400+西安交通大学815869(原909)信号与系统考研经验电子信息与通信工程,真题,大纲,参考书

经过将近一年的考研复习&#xff0c;终于梦圆西安交大&#xff0c;今年专业课815(和专硕869&#xff08;原909&#xff09;差不多)信号与系统135&#xff0c;总分400&#xff0c;回想这一年的复习还有很多经验和大家分享&#xff0c;希望可以对大家复习有所帮助&#xff0c;少走…

3.cpp基本数据类型

cpp基本数据类型 1.cpp基本数据类型 1.cpp基本数据类型 C基本数据类型和C语言的基本数据类型差不多 注意bool类型&#xff1a;存储真值 true 或假值 false&#xff0c;C语言编译器C99以上支持。 C语言的bool类型&#xff1a;要添加 #include <stdbool.h>头文件 #includ…

数据库相关知识点

1. 数据库分片与分区 分片&#xff08;Sharding&#xff09;&#xff1a;这是一种将数据水平分割的技术&#xff0c;每个分片包含数据的一个子集。分片通常用于提高数据库的扩展性和性能&#xff0c;特别是在处理大量数据时。通过将数据分布在多个分片上&#xff0c;可以并行处…