Вы отслеживаете любую отладочную информацию? Скорее всего, во время инициализации создается исключение. Я бы проследил все ваши исключения и использовал Debugview для просмотра.
Это происходит из-за того, что неявный фид строки, также известный как символ новой строки \n
, добавляется ко всем пользовательским вводам терминала, поскольку он сообщает потоку начать новую строку. Вы можете смело учитывать это, используя std::getline
при проверке нескольких строк ввода пользователя. Поведение по умолчанию std::getline
будет читать все до и включая символ новой строки \n
из объекта входного потока, который в этом случае является std::cin
.
#include <iostream>
#include <string>
int main()
{
std::string name;
std::string state;
if (std::getline(std::cin, name) && std::getline(std::cin, state))
{
std::cout << "Your name is " << name << " and you live in " << state;
}
return 0;
}
blockquote >Input: "John" "New Hampshire" Output: "Your name is John and you live in New Hampshire"
Все будет ОК, если вы измените исходный код следующим образом:
if ((cin >> name).get() && std::getline(cin, state))
get()
потребляет следующий символ. Есть также (std::cin >> name).ignore()
, которые я предложил ранее в своем ответе.
– 0x499602D2
26 March 2014 в 14:14
if (getline(std::cin, name) && getline(std::cin, state))
?
– Fred Larson
19 August 2016 в 19:41