2013-12-13 52 views
0

我試圖兩次利用getline()功能,以存儲一本書的標題,然後作者在兩個獨立的變量名,我會再使用後寫這個信息有一個問題到文件。但是,每當我運行該程序,併到達我在哪裏添加書的一部分,它跳過了書名輸入相位,並跳過直奔作者(它閃爍,讓我知道我可以爲作者輸入,但是它永遠不會眨眼爲標題)。使用getline函數

void LMS_Processing::addBook() 
{ 
    fstream listingsFile; 

    string title = ""; 
    string author = ""; 

    system("cls"); 

    listingsFile.open("listing.books", ios::out | ios::app); 

    cout << "LMS: Edit - Add Book" << endl; 
    cout << endl; 
    cout << "Book Title: "; 
    getline(cin, title); 

    listingsFile << title << ':'; 

    cout << endl; 
    cout << "Author: "; 
    getline(cin, author); 

    listingsFile << author << ':'; 
    listingsFile << "in" << endl; 

    listingsFile.close(); 
} 

基本上,通過以下的代碼它打印「書名:」該程序,然後忽略了,我把getline(cin, title)然後事實仍在繼續。

+1

在相關問題處向右看。 – chris

回答

2

在此之前的代碼是否從cin讀取任何輸入?如果是這樣,它可能不會消耗cin中的最新換行符,而是將其保留爲getline()

例如,如果你在你的代碼是這樣的:

int option; 
std::cout << "Enter option: << std::endl; 
std::cin >> option; 

if (option == 1) 
    addBook(); 

那麼該代碼將留下一個換行符晃來晃去的輸入等待,並在addBook()getline()會讀它。

+0

我想你在那裏忘記了一些東西。輸入到'option'中? –

+0

是的,我做到了。我的問題原來是重複的。我接着說:cin.ignore();',我用它來接收菜單輸入CIN後,它解決了這個問題。 – Mourneris

+0

@BenjaminLindley:是的......錯過了,因爲晚餐太快地叫我走了。 ;-) –