2

私は模擬書店プログラムを書こうとしています。プログラムは、1 つの入力ファイルからデータを読み取り、それを 1 つの出力ファイルに書き込みます。私にはいくつかの制約があります。1 つの入力ファイルと 1 つの出力ファイルしか使用できません。2 つの for ループを使用する必要があります。ファイルにリストされている 5 人の顧客ごとに 1 つと、購入予定の書籍ごとに 1 つずつ、最大 5 冊の書籍の可能性があります。

最初の for ループは、顧客情報と購入する書籍の数を入力します (したがって、次の for ループは反復回数を認識します)。2 番目のループでは、書籍に関する情報が取得されます。

問題: 出力ファイルが上書きされないようにする方法は知っていますが、ループの最後の繰り返しが中断された場所から入力ファイルを読み取るにはどうすればよいですか。

何らかの理由で、コードを投稿しようとすると、コードが再フォーマットされ、存在しないはずの文字が追加されます。しかし、ここに私がやろうとしていることの疑似コードがあります。

for(count=1; count<=5; count++)
   {
   fin.open("input.txt");
   fin << user information(including name, address and number of books)
   fout.open("output.txt" ios::app);
   fout >> user information

   for(count1=1; count1<=numbbooks; count1++)
      {
      fin << book information(Name, Author, Price)
      fout >> book information
      }

getline、fin、を使用してデータを取得する方法は知っていますが、各ループの最初の繰り返しの後、ファイルの先頭から読み取りを開始します。前の反復が終了した場所から読み取る必要があります。出力の ios:app を理解しています。

サンプル入力ファイル

user name
address
number of books
book1
price1
book2
user name2
address
number of books
book2.1
price2.1

など 実際にはそれよりも多くの情報があります。どんな助けでも大歓迎です。初心者の質問で申し訳ありません。ここに投稿する前に検索して検索しました。

4

2 に答える 2

3

シンプルに、ループのたびに開いたり閉じたりしないでください。外側のループの前に一度開き、同じループの後に一度閉じます。

ファイルを開くと、通常、読み取り/書き込み位置はファイルの先頭に設定されます (すでにわかっているように、ios::app は例外です)。

于 2012-10-23T11:28:01.863 に答える
1

<<>>の記号が逆になっています。

UserInformation および BookInformation の構造体 (またはクラス) を作成してから、これらのオーバーロードを作成します。

std::ostream& operator<<( std::ostream& os, const UserInformation& );
std::istream& operator>>( std::istream& is, UserInformation& );
std::ostream& operator<<( std::ostream& os, const BookInformation& );
std::istream& operator>>( std::istream& is, BookInformation& );

それらのそれぞれは、構造体メンバーに対して読み取りまたは書き込みを行います。

外側のループでは、ファイルを開くのではなく、読み取り/書き込みのみを行う必要があるため、それらをループの外に移動します。

fin.open("input.txt");         
fout.open("output.txt" ios::app);      

// verify both fin and fout worked correctly then
UserInformation userInfo;
while( fin >> userInfo ) // or use a count if you only want to read a limited number
{
     // continue with reading books and outputting..
}
于 2012-10-23T11:27:47.080 に答える