C++文件流 例题

 问题:

设计一个留言类,实现以下的功能: 
1) 程序第一次运行时,建立一个 message.txt 文本文件,并把用户输入的信息存入该文件; 
2) 以后每次运行时,都先读取该文件的内容并显示给用户,然后由用户输入新的信息,退出时将新的信息存入这个文档。
文件的内容,既可以是最新的信息,也可以包括以前所有的信息,用户可自己选择。


代码:

#include <iostream>
#include <fstream>
#include <unistd.h>#define MESSAGE_FILE_PATH "message.txt"using namespace std;int menu();// Message
class Message{
public:string message;fstream message_file;void first_run(); // 第一次运行void run(); // 普通运行void display(); // 读输出
};int main(){cout<<"*******welcome********"<<endl;Message data;cout<<"Please leave a message:";cin>>data.message; // 从键盘输入数据if(access(MESSAGE_FILE_PATH,F_OK))    data.first_run(); // 如果文件不存在else data.run();return 0;
}// 读输出
void Message::display(){message_file.open(MESSAGE_FILE_PATH,ios::in|ios::binary); // 打开文件if(message_file.fail()){ // 打开失败cout<<"open file failed"<<endl;return ;}string line;cout<<"************************"<<endl;cout<<"previous message: ";while(getline(message_file,line))	cout<<line<<endl;message_file.close();
}
// 第一次运行
void Message::first_run(){message_file.open(MESSAGE_FILE_PATH,ios::out|ios::binary); // 创建打开文件if(message_file.fail()){ // 打开失败cout<<"open file failed"<<endl;return ;}message_file<<message; // 写文件cout<<"write ok,message is \""<<message<<"\"."<<endl;message_file.close(); // 关闭文件
}
// 正常运行
void Message::run(){int choose = 0;Message::display(); // 读输出choose = menu();if(choose == 1){ // 追加message_file.open(MESSAGE_FILE_PATH,ios::app|ios::binary); // 追加打开文件if(message_file.fail()){ // 打开失败cout<<"open file failed"<<endl;return ;}}else{ // 覆盖message_file.open(MESSAGE_FILE_PATH,ios::out|ios::binary); // 清空打开文件if(message_file.fail()){ // 打开失败cout<<"open file failed"<<endl;return ;}}message_file<<message; // 写文件cout<<"write success,new message is \""<<message<<"\"."<<endl;message_file.close(); // 关闭文件
}
// 菜单
int menu(){int choose,flag = 0;while(1){cout<<"************************"<<endl;cout<<"*         1.追加       *"<<endl;cout<<"*         2.覆盖       *"<<endl;cout<<"************************"<<endl;cin>>choose;switch(choose){case 1:flag = 1;break;case 2:flag = 1;break;default:cout<<"please choose again..."<<endl;}if(flag)	break;}return choose;
}

输出:

第一次运行:


追加写


覆盖写

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

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

相关文章

exoplayer的使用-7,手势优化

之前的手势,虽然勉强实现了效果,但有一些问题. 手按着,会有抖动,这样就不断触发进度亮度这些. 第一次按下,然后拖动,产生的变化太大,严重不符合预期. touch在一个方法里面,从代码的角度看,不便于维护. Gesture手势类都给我们处理好了,双击,点击,滚动这些.所以打算用这个优化…

遮挡半透明效果

1、遮挡半透明效果是什么 在游戏开发中&#xff0c;遮挡半透明效果就是物体被挡住的部分&#xff0c;也能呈现出一种半透明效果而被看到&#xff08;具体效果可以自定义&#xff09;比如 当角色在建筑物之间穿行时&#xff0c;被遮挡部分能够呈现出半透明效果而被我们看到。遮…

大模型高效推理综述

大模型高效推理综述 1 Introduction2 Preliminaries2.1 transformer架构的LLM2.2 大模型推理过程2.3 推理效率分析 3 TAXONOMY(分类)4.数据级别优化4.1输入压缩4.1.1 提示词裁剪&#xff08;prompt pruning&#xff09;4.1.2 提示词总结&#xff08;prompt summary&#xff09;…

计算机网络--UDP和TCP课后习题

【5-05】 试举例说明有些应用程序愿意采用不可靠的UDP, 而不愿意采用可靠的TCP。 解答&#xff1a; 这可能有以下几种情况。 首先&#xff0c;在互联网上传输实时数据的分组时&#xff0c;有可能会出现差错甚至丢失。如果利用 TCP 协议对这些出错或丢失的分组进行重传&…

http://noi.openjudge.cn/_3.9数据结构之C++STL_1806:词典

题目 1806:词典 总时间限制: 3000ms 内存限制: 65536kB 描述 你旅游到了一个国外的城市。那里的人们说的外国语言你不能理解。不过幸运的是&#xff0c;你有一本词典可以帮助你。 输入 首先输入一个词典&#xff0c;词典中包含不超过100000个词条&#xff0c;每个词条占据一行…

深入探索:将 Elasticsearch 与 Ruby 工具结合使用

深入探索&#xff1a;将 Elasticsearch 与 Ruby 工具结合使用 一、背景介绍 1. Elasticsearch 与 Ruby 的结合背景 在现代软件开发中&#xff0c;Elasticsearch 作为一个基于 Lucene 的搜索引擎&#xff0c;以其分布式、可扩展、实时搜索等特点而广受欢迎。Ruby&#xff0c;…

模型分割的联邦微调与专家 MOE结合

基于模型分割的联邦微调 在基于模型分割的联邦微调中,要实现模型分割且不影响大模型整体效果,可从以下方面着手: 依据功能和数据特性分割:分析模型的功能结构以及不同部分对数据的依赖程度。例如,在自然语言处理的大模型中,可将词嵌入层、语法分析层、语义理解层等按功能…

MyBatis 与 MyBatis-Plus 的区别

MyBatis 和 MyBatis-Plus 都是用于简化 Java 应用程序与数据库交互的持久层框架&#xff0c;但它们在功能、易用性和性能优化方面存在显著差异。下面将详细介绍两者之间的区别&#xff0c;并通过具体的代码示例进行对比。 概述 MyBatis&#xff1a;作为一款经典的持久层框架&a…

Go语言的基础知识

1, Go 语言介绍 Go 即 Golang,是 Google公司2009年11月正式对外公开的一门编程语言。 根据 Go 语言开发者自述&#xff0c;近10多年&#xff0c;从单机时代的C语言到现在互联网时代的Java,都没有令人满意的开发语言&#xff0c;而C往往给人的感觉是&#xff0c;花了100%的经历…

【UE5 C++课程系列笔记】20——共享指针的简单使用

目录 概念 创建共享指针示例 重设共享指针 共享指针内容转移 共享指针和共享引用的转换 判断共享指针的相等性 共享指针访问成员函数 自定义删除器 概念 共享指针&#xff08;主要以 TSharedPtr 为例&#xff09;&#xff0c;TSharedPtr 基于引用计数机制来工作&#x…

flux中的缓存

1. cache&#xff0c;onBackpressureBuffer。都是缓存。cache可以将hot流的数据缓存起来。onBackpressureBuffer也是缓存&#xff0c;但是当下游消费者的处理速度比上游生产者慢时&#xff0c;上游生产的数据会被暂时存储在缓冲区中&#xff0c;防止丢失。 2. Flux.range 默认…

Ubuntu网络连接问题(笔记本更换wifi后,虚拟机连不上网络)

1、笔记本更换wifi后&#xff0c;虚拟机的IP地址变了&#xff0c;然后就连不上网络了&#xff08;主机笔记本连接wifi正常上网&#xff09; 2、修改子网地址&#xff08;按照ubutun的ip设置子网掩码&#xff09; 3、Ubuntu已经显示网络连接正常了&#xff0c;但是就是无法上网&…

如何在 Ubuntu 22.04 上安装 Cassandra NoSQL 数据库教程

简介 本教程将向你介绍如何在 Ubuntu 22.04 上安装 Cassandra NoSQL 数据库。 Apache Cassandra 是一个分布式的 NoSQL 数据库&#xff0c;旨在处理跨多个普通服务器的大量数据&#xff0c;并提供高可用性&#xff0c;没有单点故障。Apache Cassandra 是一个高度可扩展的分布…

【开发工具】好用的进程管理工具supervisor

supervisor配置与使用 概述配置文件详解其他高级用法相关文献 概述 Supervisor是一个用Python编写的进程管理工具&#xff0c;主要用于在类Unix系统中管理和监控长时间运行的进程。以下是对它的详细介绍&#xff1a; 一、功能特点 进程监控 Supervisor可以自动启动、停止和重启…

C++编程等级认证学习计划

C编程等级认证学习计划 计划目标 在30天内系统学习并掌握C编程等级认证&#xff08;一至八级&#xff09;的知识点&#xff0c;为参加认证考试做好充分准备。 前期准备 学习资料收集 准备涵盖C编程一至八级知识点的专业教材&#xff0c;如《C Primer》等。收集相关的在线教…

Spring MVC实战指南:构建高效Web应用的架构与技巧(三)

响应数据和结果视图(7种) 返回值分类 创建web.xml&#xff08;spring、过滤器解决乱码、配置控制器dispatcherServlet、加载springmvc.xml文件、配置启动加载&#xff09;创建springmvc.xml文件 <!--配置了内容&#xff0c;启动Tomcat服务器的时候&#xff0c;就会被加载--…

Postgresql中clog与xid对应关系计算方法(速查表)

知道xid计算clog文件名 CREATE or REPLACE PROCEDURE get_clog_name(xid bigint) as $$ DECLAREpageno bigint;segno bigint; BEGIN-- 页面号&#xff1a;一个页面8K&#xff0c;一个字节8位能存4个事务的状态。pageno : xid / (8192 * 4);-- 段号&#xff1a;一个段&#xf…

oscp备考 oscp系列——Kioptix Level 1靶场 古老的 Apache Vuln

目录 前言 1. 主机发现 2. 端口扫描 3. 指纹识别 4. 目录扫描 5. 漏洞搜索和利用 前言 oscp备考&#xff0c;oscp系列——Kioptix Level 1靶场 Kioptix Level 1难度为简单靶场&#xff0c;主要考察 nmap的使用已经是否会看输出&#xff0c;以及是否会通过应用查找对应漏…

Linux下编译安装PETSc

本文记录在Linux下编译安装PETSc的流程。 零、环境 操作系统Ubuntu 22.04.4 LTSVS Code1.92.1Git2.34.1GCC11.4.0CMake3.22.1oneAPI2024.2.1 一、安装依赖 1.1 安装oneAPI 参见&#xff1a;Get the Intel oneAPI Base Toolkit , Get the Intel oneAPI HPC Toolkit 1.2 安…

51单片机——蜂鸣器模块

P2.5管脚控制蜂鸣器 #include "reg51.h" typedef unsigned int u16; typedef unsigned char u8;sbit BEEPP2^5; void delay(time){ while(time--); } void main(){ u16 i2000; //脉冲2000次 while(1){ while(i--){ BEEP!BEEP; //…