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

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 に答える