2013-09-09 8 views
5

Я работаю над некоторыми упражнениями новичка на C++, и это меня озадачило. Я могу ввести число, но после этого я не получаю возможность вводить символ, и он переходит к последней строке.Не удается получить char из cin.get()

Я знаю, что могу использовать символ cin >>, но я хотел бы знать, почему это не работает.

#include<iostream> 
using namespace std; 

int main() { 

    cout << "Enter a number:\n"; 
    int number; 
    cin >> number; 

    char symbol; 
    cout << "Enter a letter:\n"; 
    cin.get(symbol); 

    cout << number << " " << symbol << endl; 

    return 0; 
} 
+3

Я думаю, что ваша переменная символ получает возврат каретки т.е. '\ n' в качестве значения. Подсказка: проверьте, что вы получаете как результат для вашего окончательного 'cout' – Ani

+0

Ah. Ты прав. Добавляя еще один cin.get(), перед символом исправлена ​​проблема. – lelouch

ответ

2

\n будет оставаться в буфере после первого cin. Вы можете решить эту проблему, добавив пустой cin.get() между двумя последовательными чтениями.

cin.get(string1,maxsize); 
cin.get(); 
cin.get(string2,maxsize); 

Или вы можете использовать fflush:

cin.get(string1,maxsize); 
fflush(stdin); 
cin.get(string2,maxsize); 
+1

В более общем плане '' '' ** форматирует ** ввод; отчасти это означает, что он пропускает ведущие пробелы. 'get()' does ** unformatted ** input, который не игнорирует пробелы. Смешивание форматированного и неформатированного ввода может привести к путанице. –

+0

Обратите внимание, что использование fflush в потоке, не являющемся обновлением или выходным потоком, является неопределенным поведением. – wintermute

8

Вы должны удалить '\n' из потока, оставшиеся после ввода номера:

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 

Без него вы будете читать символ новой строки. Вы можете проверить, что с:

std::cout << (symbol == '\n') << std::endl;