2013-12-13 4 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(); 
} 

В основном, следуя процедуре кода он печатает «Book Title:», а затем игнорирует тот факт, что я ставлю getline(cin, title), а затем продолжается.

+1

Посмотрите направо на соответствующие вопросы. – chris

ответ

2

Имеет ли код перед этим читать любые данные от cin? Если это так, он может не потреблять самую последнюю строку новой строки от cin, оставив ее для getline() в этой функции.

Например, если у вас есть что-то подобное в вашем коде:

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

if (option == 1) 
    addBook(); 

то, что код будет оставить оборванный символ новой строки ожидания на входе, и getline() в addBook() прочтет.

+0

Я думаю, вы что-то забыли в своем примере. Ввод в 'option'? –

+0

Да, я сделал. Мой вопрос оказывается дубликатом. Я добавил 'cin.ignore();' после cin, который я использую для получения ввода в меню, и решил проблему. – Mourneris

+0

@BenjaminLindley: Да ... Пропустил это, так как ужин вызвал меня слишком быстро. ;-) –

Смежные вопросы