0

代码:

#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));
       }
  .....

文件为空

4

3 回答 3

1

对我来说,代码似乎不太像 C++……要回答最后一个问题,没有任何关于循环中的 fstreams 的问题,不。

我建议首先尝试处理f.write成员nameamt他们自己——编译器可能会在 name 和 amt 之间添加填充,从而产生不需要的垃圾输出。

你确定你一直有文件路径的写权限吗?尝试打开一个本地文件,因为路径只是“1.dat”。

也尝试将文件打开为f("/* file name */", ofstream::out | ofstream::app). “out”将其设置为输出流,“app”将其添加到文件末尾。www.cplusplus.com/ofstream 详细介绍了更多标志。

于 2013-03-17T15:00:31.637 回答
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 中编译了代码并运行了它。该文件包含我输入的所有内容。但是,当您使用文件 i/o 流写入文件时,最好使用 << 运算符。

您可以在此链接顶部找到更多信息:http: //members.gamedev.net/sicrane/articles/iostream.html

还有一点,如果你已经完成了对文件的写入,记得刷新并关闭文件句柄,否则,有时会导致一些烦人的问题。

于 2013-03-17T15:02:13.857 回答
0

由于您使用的是c++,我建议您使用正式的方式来使用ofstream,在您的代码中,它应该是f << s.name << s.amt。

请记住,您使用的是 c++,所以请继续使用 i/o 流。

于 2013-03-17T14:57:39.613 回答