これは宿題プロジェクトで、ユーザーは番号、通りの名前などのデータを持つ人のデータベースを操作します。データはテキスト ファイルに存在します。
一部のメニュー オプションでは、プログラムがそのデータを読み取ったり操作したりする必要があります (たとえば、表示オプション)。これは、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;
};