getline () не выполняется [дубликат]

Вы отслеживаете любую отладочную информацию? Скорее всего, во время инициализации создается исключение. Я бы проследил все ваши исключения и использовал Debugview для просмотра.

74
задан πάντα ῥεῖ 23 December 2016 в 17:02
поделиться

3 ответа

Это происходит из-за того, что неявный фид строки, также известный как символ новой строки \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;
}
Input:

"John"
"New Hampshire"

Output:

"Your name is John and you live in New Hampshire"
0
ответ дан Justin Randall 17 August 2018 в 10:59
поделиться

Все будет ОК, если вы измените исходный код следующим образом:

if ((cin >> name).get() && std::getline(cin, state))
10
ответ дан Qantas 94 Heavy 17 August 2018 в 10:59
поделиться
  • 1
    Спасибо. Это также будет работать, потому что get() потребляет следующий символ. Есть также (std::cin >> name).ignore(), которые я предложил ранее в своем ответе. – 0x499602D2 26 March 2014 в 14:14
  • 2
    & quot; .. работать, потому что get () ... & quot; Да, точно. Извините за то, что вы ответили без подробностей. – Boris 26 March 2014 в 15:14
  • 3
    Почему не просто if (getline(std::cin, name) && getline(std::cin, state))? – Fred Larson 19 August 2016 в 19:41
86
ответ дан user -1 17 August 2018 в 10:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: