C ++ строковый вопрос - PullRequest
       9

C ++ строковый вопрос

1 голос
/ 14 ноября 2009

У меня очень простой вопрос.

string str;
cin >> str;
cout << str;

если я наберу "Hello World", я получу только "Hello". Я знаю, что это, вероятно, связано с пробелами. Поэтому мой вопрос: как мне написать, если я тоже хочу пробел?

Я также пытался использовать getline (cin, str); , но он только сначала прочитает ввод и пропустит остальные

Ответы [ 3 ]

2 голосов
/ 14 ноября 2009

getline(cin, str) должно работать, но вам может потребоваться очистить входной буфер перед его вызовом, если вы столкнетесь с "пропуском символов":

std::cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
std::string str;
std::getline(std::cin, str);
1 голос
/ 14 ноября 2009

getline (cin, str) - правильный путь. Что вы имеете в виду, что он только прочитает ввод в первый раз и пропустит остальные?

0 голосов
/ 14 ноября 2009

Проблема в том, что operator >> оставляет следующий пробел / перевод строки / что угодно во входном буфере. Поэтому, если вы вызовете cin >> str, а затем getline( cin, str ), операция getline увидит, что первый символ во входном буфере является новой строкой, и остановится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...