第一次进入for循环后跳过getline

时间:2012-12-03 16:18:49

标签: c++ for-loop getline

  

可能重复:
  Use getline and >> when read file C++

struct collection
{
    string title, author, isbn;
    float price;
    bool availability;
    int borrow;
};
void read1(member a[]);
void read2(collection b[]);
int main()
{
    member a[20];
    collection b[100];
    read1(a);
    read2(b);

}

这是我正在尝试运行的功能。它第一次运行良好,但第二次围绕getline不读取书的标题并跳过它。然后它会在第二个getline中稍后读取它。

void read2(collection b[])
{
ifstream database;
string n1;
cout << "Enter second input file name: ";
getline(cin, n1);
database.open(n1.c_str());
if(database.fail())
{
    "Bad file. \n" ;
}
else
{
    for(int j=0;!database.eof();j++)
    {
        getline(database, b[j].title);
        cout << b[j].title<<endl;
        getline(database,b[j].author);
        cout<<b[j].author<<endl;
        database>>b[j].isbn;
        cout<<b[j].isbn<<endl;
        database>>b[j].price;
        cout<<b[j].price<<endl;
        database>>b[j].availability;
        cout<<b[j].availability<<endl;
        database>>b[j].borrow;
        cout<<b[j].borrow;
    }
    database.close();
}   
}            

1 个答案:

答案 0 :(得分:0)

首先,快速检查是否有故障或坏位,因为当故障位打开时,它可能会阻止文件流进行读取操作。您可能会错误地尝试将字符串读取为整数,例如,这会引发失败位。