函数
判断执行完某一函数后是否要退出整个程序:
cout << " - 修改成功! -" << endl;
cout << " - 请选择:返回登录请扣1 -" << endl;
cout << " - 退出系统请扣任意数字 -" << endl;
int num;
cin >> num;
return num;
主函数中根据该函数返回值判断就行了(少了很多判断语句啊)if(...=1){……}; else{……};
文件
输入输出
采用ifstream和ofstream处理同一个文件的时候需要注意分开文件流
ifstream file1("wawawa.txt");
ofstream file2("wawawa.txt");
修改文件内容
实例:用户密码的修改
只修改其中部分内容而不用重新写入整个文件的方法
比如:
seekp(写指针)和seekg(读指针)
例子:(修改数据)
#include <fstream>
#include <iostream>
using namespace std;
int main()
{
fstream file("example.txt", ios::in | ios::out | ios::app);
if (file.is_open())
{
// 移动到文件的第10个字符位置
file.seekp(9); // 从文件开始位置向后移动9个字符
// 在新位置写入数据
file << "Hello, World!";
file.close();
}
return 0;
}
(缺点)很可惜,这种修改文档中部分内容的方式只有 当文件中每一行记录的长度是固定的 或者 已知字节位置 的时候才能通过计算定位以生效(或者通过额外的记录来确定字节位置)
链表:插入的时候个人感觉不好用(详情请见下文)当然,删除数据的时候挺好用的,但是会占内存空间,个人还是推荐下面用两个文件的方法
可以修改后将所有数据重新写入文件
比如:
- 创造第二个文件并将前半段不需要改动的内容复制到其中,然后将改动的部分复制到文件中,将后半段不需要改动的内容也复制到后面,然后对文本进行替换改名,删除旧文本
- (还有一些什么读取前一个文件的节点的方法跟这大差不差了我觉得所以不讲了)
现在来着重讲一下这个方法的实现。
使用while(getline( , ))进行循环读入。
需要注意getline并不会读入换行符,所以在将原文件内容写入副本的时候注意要换行
然后通过文件格式控制删除或修改的部分和复制的部分
最后将文件关闭并删除原文件然后对副本重命名
删除文件:
头文件:cstdio
remove(文件名); //示例: remove("example.txt.");
删除成功会返回int型的值0,可以通过这个判断是否删除成功
重命名文件:
函数原型:
int rename(const char* oldname, const char* newname);
命名成功会返回int型的值0,可以通过这个判断是否命名成功
存储
尽可能将大量信息存储在少量文件中
用户信息
可以采用链表数组存储算了吧感觉链表真没啥用给自己自讨苦吃
如果你将链表存储在一个文件里,并在某一天要在你的文件中增添某些信息,如果你要使用链表,那么你必须先读取完文件里面的所有信息来获得链表的所有节点的地址来保证链表成功的运行下去
所以,不如直接查找然后顺序插入数据好使
控制台
(点击“控制台”访问一下我那篇写的比较详细的文章,这里不过多赘述)
清空屏幕
光标的控制
用ansi码解决
(进阶版)解决system函数的闪屏问题
循环输出(不断返回系统主界面)
while(1)
然后控制条件,该break就break
修理代码
errno怪好用的嘞
const char* filename = "merchant_message.txt";
if (std::remove(filename) != 0) {
switch (errno) {
case ENOENT:
std::cerr << "错误: 文件不存在 - " << filename << std::endl;
break;
case EACCES:
std::cerr << "错误: 权限不足,无法删除文件 - " << filename << std::endl;
break;
case EBUSY:
std::cerr << "错误: 文件正在被使用 - " << filename << std::endl;
break;
default:
std::perror("删除文件失败");
break;
}
}
else {
std::cout << "文件删除成功: " << filename << std::endl;
}
一些感想
2025.1.3
持续更新中……
2025.2.25
写完了所有代码还没调试,希望不要出任何bug。
没有用到什么算法提高程序效率,查找部分都是纯暴力。
这就已经写的我头都大了。
一边写一边修改自己的代码,不断优化优化优化……现在回头看仍是很多冗余。
查了很多不必要的函数,如stoi,stof……回头看其实还有更简单的办法。
真的不建议用goto语句吗……真的很好用啊/泪
2025.3.17
今天是修bug的第四天,真的很心累/泪
原文件的删除一直报错,学会了用那个errno测试