欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > C++文件流 例题

C++文件流 例题

2025/9/18 20:47:01 来源:https://blog.csdn.net/2301_77329667/article/details/144871999  浏览:    关键词: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;
}

输出:

第一次运行:


追加写


覆盖写

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词