的代码: 的
#include<iostream.h>
#include<fstream.h>
#include<string.h>
int n = 0, flag = 0,i;
struct bac
{
char name[10];
char amt[5];
} s;
void main()
{
ofstream f("C:\\TC\\1.dat");
for(i=0;i<10;i++)
{
cout << "\nenter the details ";
cin >> s.name >> s.amt;
f.write((char *)&s, sizeof(bac));
}
}
有时代码工作正常 但在其他时候,当我查看输出文件时,它是空的,问题已经多次出现,我知道是否有关于文件处理循环的预防措施
例如。在其他计划
.....
while(ch!=4)
{
cout << "\nBANK MANAGEMENT SYSTEM \n";
cout << "enter choice ";
cout << "\n1.add\n2.search\n3.delete and overwrite ";
cin >> ch;
if (ch == 1)
{
cout << "\nenter the details ";
cin >> s.name >> s.amt;
f.write((char *)&s, sizeof(bac));
}
.....
文件为空
答案 0 :(得分:1)
代码似乎不是很C ++ - 对我来说... 要回答最后一个问题,没有任何关于循环中fstream的问题,没有。
我建议首先尝试与成员f.write
和name
进行amt
- 编译器可能会在name和amt之间添加填充,从而创建不需要的垃圾输出。
您确定您始终对文件路径具有写入权限吗?尝试打开一个本地文件,就像路径只是“1.dat”。
同时尝试将文件打开为f("/* file name */", ofstream::out | ofstream::app)
。 “out”将其设置为输出流,“app”将其添加到文件末尾。 www.cplusplus.com/ofstream详细介绍了更多标志。
答案 1 :(得分:1)
我猜你可能使用了比gcc 4.5.3更旧的旧编译器。 我尝试了你的代码,没有问题。
#include <iostream> //use header file without using deprecated iostream.h
#include <fstream> //same reason as above
#include <string>
using namespace std;
int n = 0, flag = 0,i;
struct bac
{
char name[10];
char amt[5];
} s;
int main() //usually main returns int. void was kind of old now
{
ofstream f("test.txt");
for(i=0;i<10;i++)
{
cout << "\nenter the details ";
cin >> s.name >> s.amt;
f.write((char *)&s, sizeof(bac));
}
f.flush();
f.close();
return 0;
}
我在gcc 4.5.3中编译了代码并运行它。该文件包含我输入的所有内容。 但是,最好使用&lt;&lt;使用文件i / o流写入文件时的运算符。
您可以在此链接的顶部找到更多相关信息: http://members.gamedev.net/sicrane/articles/iostream.html
另一点,你已经完成了对文件的写入,记得刷新并关闭文件句柄,否则,有时会引起一些恼人的问题。
答案 2 :(得分:0)
因为您使用的是c ++,我建议您使用正式的方法来使用ofstream,在您的代码中,它应该是f&lt;&lt; s.name&lt;&lt; s.amt。
请记住,您正在使用c ++,因此请继续使用i / o流。