getline не читает строку правильно [дублировать]

Думаю, ты хочешь этого по искривлению земли. Ваши две точки и центр земли находятся на плоскости. Центр Земли - это центр круга на этой плоскости, и две точки (примерно) расположены по периметру этого круга. Из этого вы можете рассчитать расстояние, узнав, что угол от одной точки к другой.

Если точки не совпадают с высотами, или если вам нужно учитывать, что земля не идеальная сфера становится немного сложнее.

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 18 August 2018 в 14:29
поделиться

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

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

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