2012-12-03 108 views
0

可能重複:
Use getline and >> when read file C++函數getline之後第一次被跳過的for循環

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(); 
} 
}    
+0

該cout不會在那裏。我只是把它放入來檢查數據是否正確地放入結構數組中。 – TripleKyu

+5

你正在閱讀的文件是什麼樣的? – shf301

+1

不要結合使用'getline'和'>>'。許多類似的問題,但簡短的版本是'getline'刪除''\ n'','>>'不。 – BoBTFish

回答

0

首先,做一個快速檢查,如果失敗或壞位上,因爲當失敗位上,它可能會從能夠做讀取操作阻止文件流。您可能會錯誤地嘗試將字符串讀入一個整數,例如會引發失敗位。