0

Turbo C++ を使用して、銀行の貸衣装の ID と残高を.datファイルに保存する簡単なコードを作成しました。しかし、ID または残高(特に ID として 3333 または残高として 3333)を入力してからデータを表示すると、コードが機能せず、何も起こらないことがあります。

次に、別のアカウントのデータを追加すると、ランダムなガベージ値が提供され、新しいアカウントを追加するとランダムなガベージが提供され続けます。この問題を解決するには少し助けが必要です。

以下はコードです:

#include <constream.h>
#include <fstream.h>
#include <stdio.h>
#include <time.h>
#include <string.h>

struct data
{
    int id;
    long bal;
    char date[20];

    data()
    {
        id=0;
        bal=0;
    }

}d1,d2;


void addaccount(void)
{
    clrscr();
    cout<<"\t\t\t Add New Account\n";
    ofstream obj("d:\\tc\\data1.dat",ios::app);
    cout<<"Enter ID  ";
    cin>>d1.id;
    cout<<"\nEnter Amount Deposited at Account Opening  ";
    cin>>d1.bal;

    while(d1.bal<2000)
    {
        cout<<"Amount should be Greater then RS 1999 \n\t\t\TEnter Amount Again ";

        cin>>d1.bal;
    }
    {
        time_t t;
        struct tm * x;
        time(&t);
        x=localtime(&t);
        strftime(d1.date,21,"\n%Y/%m/%d\n%H:%M:%S",x);

    }

    obj.write((char*)&d1,sizeof(data));
    obj.close();
}

void dispall(void)
{
    clrscr();
    cout<<"\t\t\tAll Accounts \n\n\n";
    ifstream obj1("d:\\numan\\data1.dat");

    while(obj1.read((char*)&d1,sizeof(data))!=0)
    {
        cout<<"ID = "<<d1.id;
        cout<<"      Balance = "<<d1.bal<<endl<<endl;
    }

    obj1.close();
    getch();
}

main()
{
    clrscr();
    int menu;

    while(menu!=8)
    {
        clrscr();
        cout<<"\t\t\tBANK MENU\n\t\t Enter Required key To perform a task \n";
        cout<<"Press \n1=> Add New Account \n";
        cout<<"2=> Display All Accounts \n";
        /*cout<<"3=> Search An Account\n";
          cout<<"4=> Delete An Account\n";
          cout<<"5=> Delete All Accounts\n";
          cout<<"6=> Updat An Account\n";
          cout<<"7=> History of An Account\n";
          */
        cout<<"8=> Exit\n";

        cin>>menu;
        switch(menu)
        {
            case 1:addaccount();
                   break;
            case 2:dispall();
                   break;
          /*case 3:search1(0);
                   break;
            case 4:delet1(0);
                   break;
            case 5:deletall();
                   break;
            case 6:update1();
                   break;
            case 7:search1(1);
                   break; */
            case 8: break;
            default:cout<<"Wrong Number Pressed";
                    getch();
        }
    }
    return(0);
}
4

1 に答える 1

2

問題は次の行にあると思います。

ifstream obj1("d:\\numan\\data1.dat");

Windows マシンを使用しているため、バイナリ データを含むファイルを読み書きする場合は、次のようにファイルをバイナリ モードで開く必要があります。

ifstream obj1("d:\\numan\\data1.dat", ios::binary);

そうしないと、偽の改行文字を置き換えたり、ファイルを早く終了させたりするなど、Windows がバイナリ データに対して残酷で異常な処理を実行します。

同様に、次の行で:

ofstream obj("d:\\tc\\data1.dat",ios::app);

次のように、おそらくバイナリ モードも使用する必要があります。

ofstream obj("d:\\tc\\data1.dat", ios::app | ios::binary);

お役に立てれば!

于 2012-12-27T21:43:50.330 に答える