Как принять ввод в строчном массиве, размер которого определен во время выполнения на C ++, используя getline ()? [Дубликат]

У меня была такая же проблема с JBoss, затем я изменил переменную JAVA_HOME, она сработала для меня. Это была версия JBoss, которая не поддерживает 1.6, она поддерживает 1.5.

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 15 August 2018 в 22:11
поделиться

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

if ((cin >> name).get() && std::getline(cin, state))
10
ответ дан Qantas 94 Heavy 15 August 2018 в 22:11
поделиться
  • 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 15 August 2018 в 22:11
поделиться
Другие вопросы по тегам:

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