第九站(17天):C++IO流

文件IO流 

 对象:文件,控制台,特定数据类型stringstream

(写数据输出流out,读数据输入流in)

ofstream :

ofstream outfile;//输出流:从键盘输出数据,写入到文件
        //文件打开默认位ios::out//字节覆盖写
        //可以截断设置为:ios::out | ios::trunc//将之前文件全部截断为0,重新开始写

//cout也是一种标准输出流
        cout << "请输入姓名: ";
//cin是标准输入流,将控制台的数据读取,输入到变量name中
        cin >> name;

#include <iostream>;
#include <fstream>using namespace std;int main(void) {string name;int age = 0;ofstream outfile;//输出流:从键盘输出数据,写入到文件//文件打开默认位ios::out//字节覆盖写//可以截断设置为:ios::out | ios::trunc//将之前文件全部截断为0,重新开始写outfile.open("user.txt",ios::out | ios::trunc);while (true){//cout也是一种标准输出流cout << "请输入姓名: ";//cin是标准输入流,将控制台的数据读取,输入到变量name中cin >> name;if (cin.eof()){break;}outfile << name << "\t";cout << "请输入年龄: ";cin >> age;outfile << age<<endl;}outfile.close();system("pause");return 0;
}

ifstream:

 ifstream infile;//输入流:从文件读取数据,再由cout输出流,写到控制台 

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

 用文件流写读二进制文件(write)

note++查看二进制文件的插件:

 

 

#include <iostream>
#include <fstream>
using namespace std;int main(void) {string name;int age;ofstream outfile;outfile.open("user.dat", ios::out | ios::trunc | ios::binary);while (1){cout << "请输入姓名:";cin >> name;if (cin.eof()) {break;}outfile << name<<"\t";//这里的age是整形的,在输出流之后自动被转换成字符串了//这里写age需要指定格式cout << "请输入年龄:";cin >> age;outfile.write((char*)&age, sizeof(int));cout << endl;}
outfile.close();
return 0;
}

 用文件流读取二进制文件(read)

 

#include <iostream>
#include <fstream>
using namespace std;int main(void) {string name;int age;ifstream infile;infile.open("user.dat", ios::in | ios::binary);while (1) {infile >> name;if (infile.eof()) {break;}cout << "姓名:" << name << "\t";char tmp;infile.read(&tmp, sizeof(tmp));infile.read((char*)&age, sizeof(age));cout << "年龄:" << age << endl;}
infile.close();
return 0;
}

 指定格式进行写文件

 

#include <iostream>
#include <sstream>
#include <fstream>using namespace std;int main(void) {string name;int age;ofstream outfile;outfile.open("user.txt", ios::out | ios::trunc);while (1){cout << "请输入姓名:";cin >> name;if (cin.eof()) {break;}cout << "请输入年龄:";cin >> age;stringstream res;res << "姓名:" << name << "\t\t\t年龄:" << age << endl;//将数据输入字符流,转成字符串outfile << res.str();cout << endl;}outfile.close();return 0;
}

指定格式进行读取文件 

用C语言的sscanf_s(对象,"指定格式",数据);

#include <iostream>
#include <sstream>
#include <fstream>using namespace std;int main(void) {string line;int age;char name[32];ifstream infile;infile.open("user.txt", ios::in);while (1) {getline(infile,line);if (infile.eof()) {break;}//用空格去取代制表符,这个格式和文件一行的格式一样sscanf_s(line.c_str(), "姓名:%s 年龄:%d", name,sizeof(name), &age,sizeof(int));cout << "姓名: " << name << "\t\t\t年龄: " << age << endl;}infile.close();return 0;
}

文件的随机读写

设置输入流的位置seekg(偏移量,起始位置(beg,cur,end))

 

#include <iostream>
#include <fstream>
#include <string>
using namespace std;int main() {//返回文件最后五十个字节的数据ifstream infile;infile.open("偏移量.cpp");if (!infile.is_open()) {cout << "文件打开失败!" << endl;return -1;}infile.seekg(-50, infile.end);while (!infile.eof()) {string name;getline(infile, name);cout << name << endl;}infile.close();return 0;
}

设置输出流的位置seekp(偏移量,起始位置(beg,cur,end))

  

#include <iostream>
#include <fstream>
#include <string>
using namespace std;int main() {string name;ofstream outfile;outfile.open("偏移量.cpp",ios::app);if (!outfile.is_open()) {cout << "文件打开失败!" << endl;return -1;}cout << "请输入一段话:";cin >> name;outfile.seekp(0, outfile.end);outfile << name;outfile.close();return 0;
}//爱上大额女权

tellg,返回该输入流的当前位置

 距离文件起始位置的偏移量,计算大小

 

#include <iostream>
#include <fstream>
#include <string>
using namespace std;int main() {ifstream infile;infile.open("偏移量.cpp");if (!infile.is_open()) {cout << "文件打开失败!" << endl;return -1;}infile.seekg(0, infile.end);cout <<"文件的大小:"<< infile.tellg() << endl;infile.close();return 0;
}

文件读写小练习

输入任意多个整数 , 把这些数据保存到文件 data.txt .
如果在输入的过程中 , 输入错误 , 则提示用户重新输入 .
指导用户输入结束 ( ctrl + z)
[ 每行最多保存 10 个整数 ]

//将标准输入缓冲区cin的所有数据都清空,同时也会清除判定符号'\n'
cin.ignore(std::numeric_limits<streamsize>::max(), '\n'); 

#include <iostream>
#include <fstream>using namespace std;
/*
输入任意多个整数, 把这些数据保存到文件 data.txt 中. 
如果在输入的过程中, 输入错误, 则提示用户重新输入.
指导用户输入结束(按 ctrl + z)[每行最多保存 10 个整数]
*/
int main(void) {int num;//s输入的数据int n = 0;//用来计数ofstream stream;stream.open("data.txt",ios::out|ios::trunc);if (!stream.is_open()) {cout << "文件打开失败!" << endl;exit(1);}//开始输入数据while(1){cout << "请输入一个整数:" ;cin >> num;if (cin.eof()){break;}if (cin.fail()){cout << "输入错误请重新输入:";cin.clear();//将标准输入缓冲区cin的所有数据都清空,同时也会清除判定符号'\n'cin.ignore(std::numeric_limits<streamsize>::max(), '\n');cin >> num;}stream << num <<" ";if ((++n)%10==0){stream<< endl;}}stream.close();
}

 从练习 2 中的 num.txt 文件读取各个整数, 打印出最大值和最小值, 以及平均值.

 

#include<iostream>;
#include <fstream>
using namespace std;int main(void) {int max, min, n = 0, sum = 0;int num;//使用输入流读取文件ifstream stream;stream.open("data.txt");if (!stream.is_open()){cout << "文件打开失败!" << endl;exit(1);}stream >> num;max = num;min = num;sum += num;n++;while (1){stream >> num;if (stream.eof()){break;}if (num>max){max = num;}else if(num<min){min = num;}sum += num;n++;}cout << "max:" << max << endl;cout << "min:" << min << endl;cout << "avg:" << sum / n << endl;cout << "n=" << n << endl;
}

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

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

相关文章

关于网络模型的笔记

1. OSI 七层参考模型&#xff1a; 简介&#xff1a; 七层模型&#xff0c;亦称 OSI&#xff08;Open System Interconnection&#xff09;参考模型&#xff0c;即开放式系统互联。参考模型 是国际标准化组织&#xff08;ISO&#xff09;制定的一个用于计算机或通信系统间互联…

DolphinScheduler-3.2.0集群部署教程

本文目录 1.集群部署方案(2 Master 3 Worker)2.前置准备工作3.端口说明4.DS集群部署1.时间同步2.配置用户、权限3.配置集群免密登陆4.ZK集群启动5.初始化数据库1.创建数据库、用户、授权2.解压缩安装包3.添加MySQL驱动至libs目录 6.配置文件修改1.dolphinscheduler_env.sh 配置…

基于YOLOv5、v7、v8的竹签计数系统的设计与实现

文章目录 前言效果演示一、实现思路① 算法原理② 程序流程图 二、系统设计与实现三、模型评估与优化① Yolov5② Yolov7③Yolov8 四、模型对比 前言 该系统是一个综合型的应用&#xff0c;基于PyTorch框架的YOLOv5、YOLOv7和YOLOv8&#xff0c;结合了Django后端和Vue3前端&am…

【PyTorch】记一次卷积神经网络优化过程

记一次卷积神经网络优化过程 前言 在深度学习的世界中&#xff0c;图像分类任务是一个经典的问题&#xff0c;它涉及到识别给定图像中的对象类别。CIFAR-10数据集是一个常用的基准数据集&#xff0c;包含了10个类别的60000张32x32彩色图像。在上一篇博客中&#xff0c;我们已…

盖子的c++小课堂:第二十六讲:双向链表

前言 谢谢各位粉丝的支持,望我早日突破1000粉 双向链表 干货!单链表从原理到实现——附python和C++两个版本 - 知乎单链表是链表家族中的一员,每个节点依旧由 数据域(data)和指针域(next)组成,链表的具体概念下面有介绍: 机器学习入坑者:程序员基本功——链表的基…

消息队列RabbitMQ.01.安装部署与基本使用

目录 RabbitMQ的作用 Message queue 释义 问题思考 存在的问题 优化方案 案例分析 带来的好处 消息队列特点 Email邮件案例分析 Docker安装部署RabbitMQ 1.下拉镜像 2.运行RabbitMQ 3.打开防火墙端口号并重新运行防火墙 4.容器启动后,可以通过 docker logs 容器 查…

如何使用宝塔面板搭建Discuz论坛服务并结合内网穿透远程访问

文章目录 前言1.安装基础环境2.一键部署Discuz3.安装cpolar工具4.配置域名访问Discuz5.固定域名公网地址6.配置Discuz论坛 前言 Crossday Discuz! Board&#xff08;以下简称 Discuz!&#xff09;是一套通用的社区论坛软件系统&#xff0c;用户可以在不需要任何编程的基础上&a…

(三) MySQL字符集

MySQL字符集包括 基字符集&#xff08;CHARACTER&#xff09;与校对规则&#xff08;COLLATION&#xff09;这两个概念&#xff1a; latin1支持西欧字符、希腊字符等gbk支持中文简体字符big5支持中文繁体字符utf8几乎支持世界所有国家的字符utf8mb4是真正意义上的utf-8 查看当…

Git学习笔记(第6章):GitHub操作(远程库操作)

目录 6.1 远程库操作 6.1.1 创建远程库 6.1.2 命名远程库 6.1.3 本地库推送到远程库(push) 6.1.4 远程库拉取到本地库(pull) 6.1.5 远程库克隆到本地库(clone) 6.2 团队内协作 6.3 跨团队协作 6.4 SSH免密登录 6.1 远程库操作 命令 作用 git remote -v 查看所有远程…

【EISCOPUS双检索】2024电子、通信与智能科学国际会议(ECIS 2024)征稿通知!

2024年5月24日-27日 中国|长沙 会议重要日期 一轮截稿时间&#xff1a;2024年3月10日 录用通知时间&#xff1a;投稿后7-15天 注册截止时间&#xff1a;2024年5月10日 一、大会背景 随着互联网的不断创新&#xff0c;电子、通信和智能科学已经广泛应用于各个领域。为了为…

智慧博物馆信息化系统建设(1)

博物馆RFID藏品管理系统 博物馆藏品保管是一项十分复杂又繁琐的工作。从事保管工作除了经常、及时地进行藏品的登记、分类、编目、保养和修复等一系列工作外,还需要把有关藏品的信息迅速、正确地提供给利用者。要提高保管工作的效率,达到现代化的科学管理,从发展趋势看,进…

街机模拟游戏逆向工程(HACKROM)教程:[19]思路的多样性

在上一章,我们找到了检测敌人出现条件的地方,并测试成功,但是找到这个位置的思路并不只有这个方法,这里我们提供另一个思路。 我们已经知道,敌人出现需要一个条件,当这个条件满足时,敌人的出现,程序会需要初始化这个敌人出现的位置,也就是说,我们可以利用敌人的坐标…

教你三个方法去除图片上的涂鸦快收藏起来吧

在数字时代&#xff0c;我们经常需要在图片上进行各种编辑和修改&#xff0c;以使其符合我们的需求。然而&#xff0c;有时候我们会遇到一些图片上的涂鸦&#xff0c;这些涂鸦不仅影响了图片的美观度&#xff0c;还破坏了图片的整体效果。那么图片上的涂鸦怎么去掉&#xff0c;…

怎么移除WordPress后台工具栏“新建”菜单?如何添加“新建文章”菜单?

默认情况下&#xff0c;WordPress后台顶部管理工具栏有左侧有一个“新建”菜单&#xff0c;而且还有下拉菜单文章、媒体、链接、页面和用户等&#xff0c;不过我们平时用得最多的就是“新建文章”&#xff0c;虽然可以直接点击“新建”&#xff0c;或点击“新建 – 文章”&…

docker安装Rabbitmq教程(详细图文)

目录 1.下载Rabbitmq的镜像 2.创建并运行rabbitmq容器 3.启动web客户端 4.访问rabbitmq的微博客户端 5.遇到的问题 问题描述&#xff1a;在rabbitmq的web客户端发现界面会弹出如下提示框Stats in management UI are disabled on this node 解决方法 &#xff08;1&#…

赠书活动~

关注公众号获得&#xff0c;发送抽奖

JSON简单了解

文章目录 1、JSON介绍2、ES6模版字符串3、JS对象转化为JSON字符串3.1、手动JS对象转化为JSON字符串3.2、自动JS对象转化为JSON字符串 4、JS对象和java互相转换 1、JSON介绍 JSON 概念&#xff1a;JavaScript Object Notation。JavaScript 对象表示法&#xff0c;简单理解JSON是…

AJAX入门到实战,学习前端框架前必会的(ajax+node.js+webpack+git)(九)

26.搭建开发环境 开发环境 | webpack 中文文档 (docschina.org) 之前运行时出现的警告和mode配置有关 目标11&#xff1a;配置开发服务器环境 webpack-dev-server 11.1 下载 webpack-dev-server 软件包到当前项目 11.2 设置打包的模式为开发模式&#xff0c;配置自定义命令 11…

OpenGL ES 实现图像腐蚀、膨胀、边缘检测

前文我们详细讲了图像锐化的基本原理,本文再介绍一下图像基本处理之腐蚀、膨胀和边缘检测,它们在图像处理和计算机视觉领域有着广泛的应用。 图像腐蚀(Image Erosion):用于缩小或消除图像中物体的边界。主要用于去除图像中的小细节、噪声或不规则物体。 实现图像腐蚀的片…

高清短视频素材网站有哪些?分享十个做短视频必备的素材下载网站!

对于专注于短视频制作和剪辑的朋友来说&#xff0c;找到高质量的视频素材至关重要。你可能会想&#xff1a;“高清短视频素材网站有哪些&#xff1f;”别担心&#xff0c;今天我要为大家推荐十个提供优质素材的网站&#xff0c;帮你轻松搞定短视频制作&#xff01; 怪木素材网…