文件处理在while循环中不起作用

时间:2013-03-17 14:47:08

标签: c++ file-handling

代码:

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

文件为空

3 个答案:

答案 0 :(得分:1)

代码似乎不是很C ++ - 对我来说... 要回答最后一个问题,没有任何关于循环中fstream的问题,没有。

我建议首先尝试与成员f.writename进行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流。