0

これは宿題プロジェクトで、ユーザーは番号、通りの名前などのデータを持つ人のデータベースを操作します。データはテキスト ファイルに存在します。

一部のメニュー オプションでは、プログラムがそのデータを読み取ったり操作したりする必要があります (たとえば、表示オプション)。これは、fstream を開き、事前に宣言された構造体が常駐するデータ型を持つ一時配列にデータを入れることで実現しました。

//reopen file
fstream listeResidents1;
listeResidents1.open("listeResidents.dat",ios::out|ios::in|ios::binary);

//Create a temporary array of objects resident for manipulation
resident tabRes1[nombreResid-1];

//Insertion des objets resident du registre dans le tableau temporaire
for (int h = 0;h < nombreResid;h++)
{
    listeResidents1.seekg((h)*sizeof(resident));
    listeResidents1.read(reinterpret_cast<char*>(&tabRes1[h]),sizeof(resident));
}

listeResidents1.close();

私の Display() 関数はこれを行います^^; 次に、forループを使用して配列内の各オブジェクトを調べ、それらのすべての属性を表示します。ただし、最後のエントリでは、最後から 2 番目の文字列にいくつかの文字が欠落しており、最後の変数である float が 0 に設定されています (これは、切り捨てられたことを意味します)。その理由はわかりません。なぜこれが起こるのか誰にも分かりますか?

視覚的な例として、最後のエントリは次の属性でファイルに正常に書き込まれました。

int numero: 4
[the other,correctly displayed attributes here]
char rue[30]: queen
float superf: 80

表示されると、最後のエントリが表示されます

numero: 4
[the other,correctly displayed attributes here]
rue: que
superf: 0

別のエントリを追加すると、4 が正しく表示されている間に切り捨てられたエントリになります...

編集:これが構造体です。

struct resident
    {
        int numero;
        char nom[30];
        char prenom[30];
        int numciv;
        char rue[30];
        float superf;
    };
4

1 に答える 1