C++文本文件的读与写

1. 写文本操作 ofstream outFile;

——学习把字符串、int、double类型写到文件中。
代码实现:

/*
_0.cpp 学习总结 视频学习C++_Primer_Plus_6_7
1. outFile.open(),outFile.close()的使用
	outFile.open()打开文件,没有该文件会自动创建该文件
	因此不必判断该文件是否打开
2. 写操作:outFile << 数据; 类比cout操作,cout能操作的outFile也适用
3. 每次写数据(覆盖)
4. 浮点数精度控制问题
*/
#include <iostream>
#include <fstream>//支持文件输入输出

int main()
{
	using namespace std;//最好局部,不要全局

	//汽车名字,年份,原价,现价
	char automobile[60];
	int year;
	double a_price;
	double d_price;
	
	//写文本操作
	ofstream outFile;
	outFile.open("carinfo.txt");//没有会自动创建该文件
	
	//键盘输入
	cin.getline(automobile, 50);
	cin >> year;
	cin >> a_price;
	d_price = 0.913 * a_price;
	
	//屏幕显示信息
	cout << fixed;//不用科学计数法显示
	cout.precision(2);//精度保留两位小数
	cout.setf(ios_base::showpoint);//显示小数点,不写(输入135.0,显示135)
	cout << "automoble: " << automobile << endl;
	cout << "year: " << year << endl;
	cout << "a_price: " << a_price << endl;
	cout << "d_price: " << d_price << endl;
	
	//数据写道文本中
	outFile << fixed;//不用科学计数法显示
	outFile.precision(2);//精度保留两位小数
	outFile.setf(ios_base::showpoint);//显示小数点,不写(输入135.0,显示135)
	outFile << "automoble: " << automobile << endl;
	outFile << "year: " << year << endl;
	outFile << "a_price: " << a_price << endl;
	outFile << "d_price: " << d_price << endl;
	
	outFile.close();
	return 0;

}

——思考:如何把结构体写入到文本文件中(未解决)。

2. 读取文本操作 ifstream inFile;

——从文本文件中读double类型。
代码实现:

/*
_1.cpp 学习总结 视频学习C++_Primer_Plus_6_8
1. inFile.open(),inFile.is_open(),inFile.close(),inFile.good(),inFile.eof(),inFile.fail()的使用
	inFile.open()打开文件,不会自动创建该文件
	因此需要判断该文件是否打开
2. 读操作:inFile << 数据; 类比cin操作
*/
#include <iostream>
#include <fstream>//支持文件输入输出
#include <cstdlib>//支持exit(EXIT_FAILURE)
const int SIZE = 60;
int main()
{
    using namespace std;
    
    //文本名字
    char filename[SIZE];
    //输入文本名字
    cin.getline(filename, SIZE);
    cout << "filename: " << filename << endl;

    //读文本操作
    ifstream inFile;
    inFile.open(filename);//读操作不能自动创建文件
    if(!inFile.is_open())//!一定不能少
    {
        cout << "打不开这个文件夹: " << filename << endl;
        exit(EXIT_FAILURE);
    }
    
    double value;
    double sum = 0;
    int count = 0;

    //读double类型
    inFile >> value;
    while(inFile.good())//判断读取的数据是否为double类型
    {
        ++count;
        sum += value;
        inFile >> value;
    }

    if(inFile.eof())
        cout << "已读到文件末尾" << endl;
    else if(inFile.fail())
        cout << "读到了一个错误数据,提前跳出循环" << endl;
    
    if(count == 0)
        cout << "没有数据可读" << endl;
    else
    {
        cout << "Items read: " << count << endl;
        cout << "Sum: " << sum << endl;
        cout << "Average: " << sum / count << endl;
    }

    inFile.close();
    return 0;
}

3. 向文件末尾追加内容 ofstream fout(file, ios::out | ios::app);

——向文件末尾追加内容 。
代码实现:

/*
_3.cpp 学习总结 视频学习C++_Primer_Plus_17_6
1. ofstream fout(file, ios::out | ios::app);
    等价于ofstream fout;fout.open(file, ios::out | ios::app);
2. fin.clear();//二次打开文件要清除上次打开的痕迹(流)
3. 写操作打开文件后不用判断是否打开文件,因为没有该文件会自动创建
*/
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>

const char *filename = "guests.txt";
int main()
{
    using namespace std;
    char ch;

    //读操作
    ifstream fin;
    fin.open(filename);//打开guests.txt,存顾客的名字(已存在)
    if(!fin.is_open())
    {
        cout << "打不开该文件夹:" << filename << endl; 
        exit(EXIT_FAILURE);  
    }

    cout << "开始读取当前文件内容:" << endl;
    while(fin.get(ch))
        cout << ch;
    fin.close();

    //写操作
    ofstream fout(filename, ios_base::out | ios_base::app);
    //接下来不用判断是否打开文件,因为没有该文件会自动创建
    //往filename里面继续写名字,追加写
    string name;
    while(getline(cin, name) && name.size() > 0)
        fout << name <<endl;
    fout.close();

    fin.clear();//二次打开文件要清除上次打开的痕迹(流)
    fin.open(filename);
    if(!fin.is_open())
    {
        cout << "打不开该文件夹:" << filename << endl; 
        exit(EXIT_FAILURE); 
    }
    cout << "再次显示filename文件夹中的所有内容" << endl;
    while(fin.get(ch))
        cout << ch;
        
    fin.close();
    return 0;
}

4. 知识点。

常量含义
ios_base::in打开文件,以便读取
ios_base::out打开文件
ios_base::out打开文件,以便写入
ios_base::app追加到文件末尾
ios_base::trunc如果文件存在,清空文件内容
ios_base::binary二进制文件
C++模式C模式含义
ios_base::in“r”打开文件,以便读取
ios_base::out“w”等价于ios_base::out | ios_base::trunc
ios_base::out | ios_base::trunc“w”打开以写入,如果文件存在,先清空文件
ios_base::out | ios_base::app“a”打开以写入,只追加
ios_base::in | ios_base::out“r+”打开以读写,在文件允许的位置写入
ios_base::in | ios_base::out | ios_base::trunc“w+”打开以读写,如果文件按存在,清空文件

5. 小练习。

——p1. 编写一个程序,它打开一个文本文件,逐个字符地读取该文件,直到到达文件末尾,然后输出该文件中包含多少个字符。
代码实现:

//1. inFile >> ch;不接受空格和换行符,遇到自动跳过
#include <iostream>
#include <fstream>
#include <cstdlib>
const int SIZE = 60;
int main()
{
    using namespace std;

    string filename;
    getline(cin, filename);//string 用getline

    ifstream inFile;
    inFile.open(filename);//该文件要存在,否则打开失败
    if(!inFile.is_open())
    {
        cout << "打不开此文件:"  << filename << endl;
        exit(EXIT_FAILURE);
    }

    char ch;
    int count = 0;

    while(!inFile.eof())//不需要提前判断得到的是否为字符
    {
        inFile >> ch;
        count++;
    }

    cout << "Count: " << count << endl;

    inFile.close();
    return 0;
}

——p2.从文件中读取所需要的信息。该文件第一行为捐款人数,余下成对,一行代表姓名,一行代表捐款金额。

	4
	Sam Stone
	2000
	Name: Freida Flass
	100500
	Tammy Tubbs
	Rich Raptor
	55000</font>

代码实现:

/*
1. get()、getline()函数的考察
    getline()与回车结束,并吃掉该回车
    get()吃掉一个字符
2. 指针、new,detele的考察(当然可以选择直接输出,不存储)
*/
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>

using namespace std;

struct patrons
{
    string name;
    int donation;
};

int main()
{
    string filename;
    getline(cin, filename);

    ifstream inFile;
    inFile.open(filename);
    
    if(!inFile.is_open())
    {
        cout << "打不开该文件:" << endl;
        exit(EXIT_FAILURE);
    }

    int num;
    inFile >> num;
    cout << num << endl;
    if(num <= 0)
        exit(EXIT_FAILURE);
    
    int i = 0;
    patrons *ppatrons;//创建一个指针变量,该变量指向结构体的地址
    ppatrons = new patrons[num];//创建按一个patrons类型的数组,
                                //该指针指向该数组的首地址,某种意义上ppations就是该数组的名字
                                //patrons并不是数组的名字

    inFile.get();//吸收文本中整数后面的的回车
    while (!inFile.eof() && i < num)
    {
        getline(inFile, ((ppatrons + i)->name));//遇到回车结束,并吃掉该回车
        inFile >> (ppatrons + i)->donation;
        inFile.get();//吸收文本中整数后面的的回车
        i++;
    }

    for(int i = 0; i < num; i++)
    {
        cout << "Name: " << ppatrons[i].name << endl;
        cout << "Donation: " << ppatrons[i].donation << endl;
    }

    delete []ppatrons;//这么删除才对,不太能理解
    inFile.close();
    return 0;
}

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

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

相关文章

通过命令行启动MySQL

通过命令行启动MySQL 右击&#xff0c;选择管理员运行 停止MySQL net stop你的服务名称 net stop MySQL启动MySQL net start你的服务名称 net start MySQL

绿色版DirectoryOpus功能强大且高度可定制的Windows文件管理器

Directory Opus&#xff08;通常简称为DOpus&#xff09;是一款功能强大且高度可定制的Windows文件管理器。它提供了许多超越Windows默认文件资源管理器&#xff08;Explorer&#xff09;的功能&#xff0c;使得文件和文件夹的管理变得更加高效和直观。以下是对Directory Opus的…

破解动态网页:如何用JavaScript获取自动消失的联想词

前几天在做数据分析时&#xff0c;我尝试获取某网站上输入搜索词后的联想词&#xff0c;输入搜索词后会弹出一个显示联想词的框。有趣的是&#xff0c;当我尝试通过按F12定位这个弹框在HTML中的位置时&#xff0c;输入框失去焦点后&#xff0c;联想词弹框就自动消失了。我观察到…

mySql的事务(操作一下)

目录 1. 简介2. 事务操作3. 四大特性4. 并发事务问题5. 脏读6. 不可重复读7. 幻读事务隔离级别参考链接 1. 简介 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求&#xff0c;即这些操作…

华为od-C卷200分题目2 - 找城市

华为od-C卷200分题目2 - 找城市 题目描述 一个城市规划问题&#xff0c;一个地图有很多城市&#xff0c;两个城市之间只有一种路径&#xff0c;切断通往一 个城市i的所有路径之后&#xff0c;其他的城市形成了独立的城市群&#xff0c;这些城市群里最大的城 市数量&#xff0…

【Python】深入了解 AdaBoost:自适应提升算法

我们都找到天使了 说好了 心事不能偷藏着 什么都 一起做 幸福得 没话说 把坏脾气变成了好沟通 我们都找到天使了 约好了 负责对方的快乐 阳光下 的山坡 你素描 的以后 怎么抄袭我脑袋 想的 &#x1f3b5; 薛凯琪《找到天使了》 在机器学习的领域中&#x…

[C++ STL] vector 详解

标题&#xff1a;[C STL] vector 详解 水墨不写bug 目录 一、背景 二、vector简介 三、vector的接口介绍 &#xff08;1&#xff09;默认成员函数接口 i&#xff0c;构造函数&#xff08;constructor&#xff09; ii&#xff0c;析构函数&#xff08;destructor&#xff0…

微信小程序地图

小程序中的 Map 地图功能详解 一&#xff0c;使用&#xff1a; 要在小程序中使用地图&#xff0c;首先需要在 WXML 文件中引入 Map 组件&#xff1a; <view class"container"><map id"myMap" longitude"{{longitude}}" latitude&quo…

开源语音合成模型ChatTTS本地部署结合内网穿透实现远程访问

文章目录 前言1. 下载运行ChatTTS模型2. 安装Cpolar工具3. 实现公网访问4. 配置ChatTTS固定公网地址 前言 本篇文章就教大家如何快速地在Windows中本地部署ChatTTS&#xff0c;并且我们还可以结合Cpolar内网穿透实现公网随时随地访问ChatTTS AI语言模型。 最像人声的AI来了&a…

超拟人大模型:AI心理健康服务的未来

摘要&#xff1a; 周末听了一场聆心智能关于情感LLM的分享&#xff0c;总结了相关内容如下。在人工智能技术的浪潮中&#xff0c;超拟人大模型技术为心理健康服务领域带来了革命性的变化。本文将分析超拟人大模型的进展、CharacterGLM模型的特点、Emohaa模型的应用以及心理健康…

42 mysql “+“ 操作符的实现

前言 问题来自于 chinaunix, mysql select 子句的小白问题 mysql 的一些基础的 算术运算符 的计算的实现 这里 整理如下 case, 执行之前 设置如下变量 set a 2; set b 3;select a b; select a b; select 1 3; select 1 3; select a b; select a b; select a b; …

实战项目: 负载均衡

0. 前言 这个项目使用了前后端,实现一个丐版的LeetCode刷题网站,并根据每台主机的实际情况,选择对应的主机,负载均衡的调度 0.1 所用技术与开发环境 所用技术: C STL 标准库 Boost 准标准库 ( 字符串切割 ) cpp- httplib 第三方开源网络库 ctemplate 第三方开源前端网…

EarMaster7.5.74官方版安装激活使用教程

EarMaster就是你音乐路上的良师益友。这是一款来自丹麦皇家音乐学院的多媒体音乐教育软件&#xff0c;针对视唱练耳为音乐学生&#xff0c;音乐爱好者以及音乐专业人员都带来了很多的帮助&#xff0c;让你们可以获得音乐家般的耳朵&#xff0c;通过专业视唱练耳培训考试&#x…

使用 PNPM 从零搭建 Monorepo,测试组件并发布

1 目标 通过 PNPM 创建一个 monorepo&#xff08;多个项目在一个代码仓库&#xff09;项目&#xff0c;形成一个通用的仓库模板。 这里以在该 monorepo 项目中搭建 web components 类型的组件库为例&#xff0c;介绍从仓库搭建、组件测试到组件发布的整个流程。 这个仓库既可…

10 C++11

10 C11 1、类型推导1.1 auto关键字1.2 auto类型推断本质 2、类型计算2.1 类型计算分类2.2 类型计算的四种规则2.3 返回值类型计算 3、列表初始化4、Lambda表达式4.1 前置知识4.2 Lambda表达式4.3 捕获表 5、右值引用5.1 概念5.2 左值引用和右值引用 6、移动语义 1、类型推导 1…

el-tree回显复选框时半选中和全选中的树

项目需求如下&#xff1a;当我点击“编辑”后&#xff0c;需要在tree树上全勾中和半勾中选项&#xff0c;由于后端接口返回的tree树是含了父级节点id的数组集合&#xff0c;所以我们回显时需要处理好这个全勾中和半勾中的问题。 主要思路如下&#xff0c;我们通过setData方法获…

【Java】已解决:java.lang.OutOfMemoryError: Java heap space

文章目录 一、问题分析背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决Java&#xff1a;java.lang.OutOfMemoryError: Java heap space 一、问题分析背景 在Java开发过程中&#xff0c;有时我们会遇到java.lang.OutOfMemoryError: Java heap spa…

在typora中利用正则表达式,批量处理图片

一&#xff0c;png格式 在 Typora 中批量将 HTML 图片标签转换为简化的 Markdown 图片链接&#xff0c;且忽略 alt 和 style 属性&#xff0c;可以按照以下步骤操作&#xff1a; 打开 Typora 并加载你的文档。按下 Ctrl H&#xff08;在 Windows/Linux 上&#xff09;或 Cmd…

【Python】理解『下采样』:原理与应用

是你多么温馨的目光 教我坚毅望着前路 叮嘱我跌倒不应放弃 没法解释怎可报尽亲恩 爱意宽大是无限 请准我说声真的爱你 &#x1f3b5; Beyond《真的爱你》 在数字信号处理、图像处理和机器学习中&#xff0c;下采样&#xff08;Downsampling&#xff09;是…

【Java04】引用变量数组初始化的内存机制

引用类型数组指向的元素也是引用。其本质是&#xff1a; 由一个在栈上的引用数组变量指向一块堆内存&#xff1b;这块堆内存里存储的元素是引用&#xff0c;又分别指向其他堆内存。 class Person // Person是一个自定义的类 {public int age;puiblic double height;public vo…