2015-04-17 2 views
0
#include <iostream> 
#include <string> 
using namespace std; 

int main(){ 
    int num; 
    string str; 

    cout << "Input an integer a= "; 
    cin >> num; 
    cout << num << endl; 
    cout << "Input a string str= "; 
    fflush(stdin); 
    getline(cin,str); 
    cout << str << endl; 
    cout << "End program" << endl; 
    return 0; 
} 

Выход:GetLine не работает после fflush

Input an integer a= 1 
1 
Input a string str= 
End program 

getline после fflush() не работает.

+0

Я не знаю ответа, но это не проблема getline(). Если вы сначала не читаете 'num', getline() в порядке. –

+0

Попробуйте использовать 'getchar();' вместо 'fflush (stdin);' –

+0

@Cool Guy: Спасибо, man :) – Lawliet

ответ

0

fflush(stdin) - это неопределенное поведение, так как поведение fflush() определено только для выходных потоков. Кроме того, это функция «C style» и не должна сочетаться с консолью ввода-вывода C++.

Вместо fflush(), вы можете отбросить символ новой строки, добавив cin.get() непосредственно после предыдущего вызова CIN:

cin >> num; 
cin.get(); 
0

Когда программа запросит «входную целое число а =», то введите 1 и Введите, поэтому после cin >> num; в потоке остается символ новой строки. Затем новая строка будет назначена str. Вот почему вы думаете, что getline после fflush (как говорит Лундин, fflush(stdin) - это неопределенное поведение) не работает.

Использовать cin.ignore(A_BIG_NUM, '\n'); до getline игнорировать новую строку.

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