2012-10-23 156 views
2

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

第一个for循环需要客户信息的输入和要购买的书的数量(所以下一个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,鳍,采取数据时,它开始从文件的开头读取每个循环的第一次迭代后,但是。我需要它从前面的迭代完成的地方读取。我了解ios:输出的应用程序。

样本输入文件

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

等有实际上是比更多的信息。任何帮助将不胜感激。对于新问题抱歉。在发布之前我搜索并搜索过。

回答

3

简单不打开和关闭它每次轮循环。在外部循环之前打开一次,并在同一循环之后关闭一次。

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

+0

我将fin.open(input.txt)和fout.open(output.txt)移到了外部for循环,现在它只能读取第一个循环内部的内容 – user1768079

+0

你好。再次回来。道歉。有效。我还剩下一个人,剩下我还没有搬走。老实说,这就是我首先想到的,但要引用说明:“外部FOR循环将为每个客户重复执行,内部FOR循环将重复由外部循环客户购买的每本书。由于数据在循环外部不可用,因此打开并关闭循环内的每个文件。“ – user1768079

+0

@ user1768079说明听起来像垃圾给我的。 – john

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

他只是在伪代码中犯了一个错误。这不是问题所在。 – interjay

+0

对不起,现在是早上6点38分。我整晚都在努力完成这件事。实际的代码比这要长得多。这只是不能正常工作的唯一部分 – user1768079

+0

那么最可能的错误是在循环中多次打开文件 – CashCow