getline пропускается после первого раза в цикле for

Возможный дубликат:
Используйте getline и ›› при чтении файла 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();
}   
}            

person TripleKyu    schedule 03.12.2012    source источник
comment
Коут не будет там позже. Я просто вставил его, чтобы проверить, правильно ли данные помещаются в массив структур.   -  person TripleKyu    schedule 03.12.2012
comment
Как выглядит файл, который вы читаете?   -  person shf301    schedule 03.12.2012
comment
Не сочетайте использование getline и >>. Много похожих вопросов, но короткая версия getline удаляет '\n', а >> нет.   -  person BoBTFish    schedule 03.12.2012
comment
stackoverflow.com/questions/12622547/   -  person BoBTFish    schedule 03.12.2012
comment
И у вас есть дополнительная проблема с вашим кодом: stackoverflow.com/questions/5605125/   -  person interjay    schedule 03.12.2012


Ответы (1)


Во-первых, быстро проверьте, включены ли биты ошибки или плохие биты, потому что, когда бит ошибки включен, он может заблокировать файловый поток от возможности выполнять операции чтения. Вы можете ошибочно попытаться прочитать строку в целое число, это, например, повышает бит ошибки.

person StackHeapCollision    schedule 03.12.2012