C++ 文件处理C+中出错+;
代码是这样的C++ 文件处理C+中出错+;,c++,file,file-handling,C++,File,File Handling,代码是这样的 ofstream f("bank.dat", ios::app); ifstream fa("bank.dat"); int n = 0, flag = 0; struct bac { char name[10]; char amt[5]; } s; void add() { cout << "\nenter the details "; cin >> s.name >> s.amt; f.write(
ofstream f("bank.dat", ios::app);
ifstream fa("bank.dat");
int n = 0, flag = 0;
struct bac
{
char name[10];
char amt[5];
} s;
void add()
{
cout << "\nenter the details ";
cin >> s.name >> s.amt;
f.write((char *)&s, sizeof(bac));
}
void ser()
{
ifstream fa("bank.dat");
fa.seekg(0);
char x[10];
cout << "\nenter value to be searched ";
cin >> x;
while (fa && flag == 0)
{
n++;
fa.read((char *)&s, sizeof(bac));
if (strcmp(s.name, x) == 0)
{
flag = 1;
break;
}
}
if (flag == 1)
{
cout << "\nfound";
cout << "\nAmount " << s.amt;
}
}
void mod()
{
ser();
cout<<" "<<n;
if (flag == 1)
{
f.seekp((n - 1) * sizeof(bac));
// cout<<f.tellp();
cout<<"\nnew details ";
add();
}
}
int main()
{f.seekp(0);
int ch;
cout << "\nBANK MANAGEMENT SYSTEM \n";
cout << "enter choice ";
cout << "\n1.add\n2.search\n3.delete and overwrite ";
cin >> ch;
if (ch == 1)
{
add();
}
if (ch == 2)
{
ser();
}
if (ch == 3)
{
mod();
}
return 0;
}
进行的手术
*分别使用amts 5,6添加sid、sar命名条目
*将sid命名条目替换为名称:sid(与原始条目相同)金额:7
文件中的输出
期望
sid 7 sar 6
发现
sid 5 sar 6 sid 7在ser()操作开始时重新初始化“n=0”。当前,每次调用搜索时,您都会不断增加“n”,这就是记录被追加到文件末尾的原因。我建议不要使用全局变量“n”和“flag”,而是返回这些值,例如
int ser()
{
// return n if search succeeds else return '-1'.
}
我认为它可以通过各种方式进行改进,也许可以看看《标准手册》中关于IO的示例代码。我认为这是因为您使用的是ios::app flag 正如上面所写的:
嗯,没错……但将其更改为ios::ate或将其保留为空白并不能奏效!!我认为您必须将其留空,并将写入光标放在
add
方法流的末尾,还有一件事@Kevin每当我试图运行while循环以使程序在菜单上运行时,我总是会出错,因为没有在文件上写入!哦我终于成功了!!!我用ate…做了一些修改,效果很好,thnx!谢谢你的建议,我会调查的!!
int ser()
{
// return n if search succeeds else return '-1'.
}
app: (append) Set the stream's position indicator to the end of the stream before each output operation.