使用for循环从文件c ++的中间读取输入

时间:2012-10-23 11:25:19

标签: c++ file-io input output

我正在尝试写一个模拟书店程序。该程序用于从一个输入文件中读取数据并将其写入一个输出文件。我有几个限制。我只能使用一个输入文件和一个输出文件。我必须使用两个for循环。一个用于文件中列出的五个客户,另一个用于他们将要购买的每本书,最多可能有5本书。

第一个for循环接受客户信息的输入,以及要购买的书籍数量(接下来循环将知道要迭代多少次)。第二个循环获取有关书籍的信息。

问题:我知道如何防止输出文件自身写入,但是如何让输入文件从循环的最后一次迭代中断读取。

出于某种原因,当我尝试发布我的代码时,它正在重新格式化它,并添加不应该存在的字符。但是这里是我想要做的伪代码。

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 for the output。

示例输入文件

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

等。实际上有更多的信息。任何帮助将不胜感激。对不起,对于新问题。我在发布之前进行了搜索和搜索。

2 个答案:

答案 0 :(得分:3)

每次循环时都不要打开和关闭它。在外循环之前打开一次,在同一循环之后关闭一次。

当您打开文件时,读/写位置通常设置为文件的开头(ios :: app是您已经发现的例外)。

答案 1 :(得分:1)

您的<<>>符号的轮次错误。

为UserInformation和BookInformation创建一个struct(或类),然后创建这些重载:

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..
}