は、私はそれからの読み取りにC++はifstreamカントは、文字列を読み、読み文字
cout << "titre = ";
cin >> livre.titre;
cout << "isbn = ";
cin >> livre.isbn;
cout << "auteur = ";
cin >> livre.auteur;
cout << "annee = ";
cin >> livre.annee;
cout << "editeur = ";
cin >> livre.editeur;
cout << "prix = ";
cin >> livre.prix;
cout<<"===================="<<endl;
ofstream write("livres",ios::app);
write.write ((char *)&livre, sizeof livre);
write.close();}
及びこれをファイルに書き込むこのコードを持っているときにエラーを取得:
void affiche()
{
livres livre;
ifstream read ("livres");
read.read ((char *)&livre,sizeof livre);
while (read)
{cout << "num : "<<livre.num<<" | isbn : "<< livre.isbn<<" | titre : "<<livre.titre<<" | auteur : "<<livre.auteur<<" | editeur : "<<livre.editeur<<" | annee : "<<livre.annee<<" | prix : "<<livre.prix<<endl;
read.read ((char *)&livre, sizeof livre);
}read.close();
}
それはときに私の問題を場合は、例えば、私がcharすべて3つの文字の最初のCOUTに取得
char titre[3];
char auteur[3];
char editeur[3];
:例えばそのようなcharとして変数を作ります「abc」と「auteur」を「def」と編集し、「ghi」を編集します。私はtitreのために叫んでいます:abcdefghi、auteur defghiの、そして最後の:ghi。 問題はint変数では発生しません。 と私はこれらの変数を文字列に変更すると、コンパイラは正常に動作しますが、exeは最初の文字列coutに固執します。
私はあなたが助けてくれることを願っています。
フルコード:
class livres{
public:
void creer() {
cout << "titre = ";
cin >> livre.titre;
cout << "isbn = ";
cin >> livre.isbn;
cout << "auteur = ";
cin >> livre.auteur;
cout << "annee = ";
cin >> livre.annee;
cout << "editeur = ";
cin >> livre.editeur;
cout << "prix = ";
cin >> livre.prix;
ofstream write("livres",ios::app);
write.write ((char *)&livre, sizeof livre);
write.close();}
void affiche() {
livres livre;
ifstream read ("livres");
read.read ((char *)&livre,sizeof livre);
while (read)
{cout << "num : "<<livre.num<<" | isbn : "<< livre.isbn<<" | titre : "<<livre.titre<<" | auteur : "<<livre.auteur<<" | editeur : "<<livre.editeur<<" | annee : "<<livre.annee<<" | prix : "<<livre.prix<<endl;
read.read ((char *)&livre, sizeof livre);
}read.close(); }
private:
int isbn;
char titre[3];
char auteur[3];
char editeur[3];
int annee;
int prix;
int num;
};
int main()
{
livres livre;
livre.creer();
livre.affiche();
return 0;
}
'char titre [3];'は、印刷可能な文字を_two_格納するだけの大きさです。 –
'livres'クラスには' livre'という変数がありませんので、コンパイルエラーが発生するはずです。また、 'livre'は変数' livre'のアドレスを与えるため、 'livres'ファイルにゴミを書く可能性があります。 – ForceBru
livreはlivresクラスのオブジェクトで、コンパイルエラーは発生しません。コードは文字なしで(整数だけで、1文字で)うまく動作します。 – ARDV