C++文件修改和读取的问题,新人求助!

qq_41509012 2017-12-24 12:35:08
#include<string>
#include<fstream>
using namespace std;
class Book
{
private:
string Bname;
int Bnumber;
public:
Book() {}
void input(int a);
void read(int a);
int getnum();
};
int Book::getnum()
{
return Bnumber;
}
void Book::read(int a)
{
if (a <= 1000)
{
string name2[1000];
int number2[1000];
ifstream fin("book.txt", ios::in | ios::_Nocreate);
if (!fin)
{
cerr << "open error" << endl;
exit(1);
}
for (int i = 0; i < a; i++)
{
fin >> name2[i] >> number2[i];
cout << "书名: " << name2[i] << "编号: " << number2[i] << endl;
}
fin.close();
}
else
cout << "超出该图书馆最大图书容纳量" << endl;
}
void Book::input(int a)
{
if (a <= 1000)
{
string name1[1000];
int number1[1000];
ofstream fout("book.txt", ios::app);
if (!fout)
{
cerr << "open error" << endl;
exit(1);
}
for (int i = 0; i < a; i++)
{
cout << "输入书籍信息(书名,编号)" << endl;
cin >> name1[i] >> number1[i];
fout << name1[i] << " " << number1[i] << endl;
}
fout.close();
}
else
cout << "超出该图书馆最大图书容纳量" << endl;
}
int main()
{
Book b;
b.input(5);
b.read(5);
}
如果用这种方法读取的话,每次都会全部读取出来,如果想比如只读取第二个的书名和编号该怎么写。
我换过用Book b[5],然后程序里读取和写入的函数里的string name[],改成string name;main函数里for循环,能写入,但是读取的时候只是输出第一个的书名和编号。


还有修改的话该怎么修改,如何定位到第二行数据。
...全文
488 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
JackyRao 2018-06-16
  • 打赏
  • 举报
回复
可以做数据定长, 不够用空格补充, 这样方便计算位置, 当然牺牲了文件大小
heronism 2018-01-02
  • 打赏
  • 举报
回复
用内存映射mmap试一下
赵4老师 2017-12-26
  • 打赏
  • 举报
回复
所谓修改删除文件a某位置的内容,其实是读打开文件a,再将‘a中修改删除位置之前的内容+修改删除的内容+a中修改删除位置之后的内容’保存到文件b,关闭文件a,删除文件a,将文件b改名为与之前文件a相同的名字,仅此而已。http://bbs.csdn.net/topics/391975224
wyg300270 2017-12-25
  • 打赏
  • 举报
回复
只输出第二行可以,只读第二行费劲!

64,318

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧