2014-01-27 3 views
0

С моим кодом что-то не так. Я набрал что-то и нажал кнопку ввода, увидев «первую строку» на экране, но я увидел пустую новую строку вместо «второй строки». Затем я снова набрал что-то и снова нажал. Тогда у меня не было шанса войти во вторую строку и получить выход напрямую. Я попробовал cin.ignore(), но это не сработало.с использованием двух getline (cin, s) в C++

# include <iostream> 
# include <string> 

void main() { 
    using namespace std; 
    string str1; 
    string str2; 

    cout << "the first string" << endl; 
    getline(cin,str1); 
    cout << "the second string" << endl; 
    getline(cin,str2); 
    cout << str1 << endl << str2 << endl; 
} 
+0

Это не скомпилировало для меня, потому что 'void main()' должно быть 'int main()'. Как только я исправил это, он работал нормально. –

+0

Вы получите предупреждение компилятора для большинства компиляторов для 'void main()', но реальная проблема, вероятно, будет заключаться в том, что вы не проверяете, чтобы входной поток все еще действовал или что вы не входите строка (то есть вы не нажимаете «ENTER» после вашего первого ввода). [Пример] (http://ideone.com/B9mHmW) –

+0

Привет, Зак, я пробовал ваш код, но мне все равно пришлось ввести две строки для первого оператора getline. Но спасибо. – Kevin

ответ

0

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

//code code code 
cin.ignore(cin.rdbuf()->in_avail()); 
getline(cin,str1); 
cin.clear(); 
cin.ignore(cin.rdbuf()->in_avail()); 
getline(cin,str2); 
cin.clear(); 

//code code code 
+0

Нет, для каждой инструкции getline есть две строки. Но спасибо. – Kevin