Когда следует использовать std::cin.getline()
? Чем он отличается от std::cin
?
Std:: cin.getline() vs. std:: cin
Ответ 1
В случае char *, std::cin.getline
получение строки вместо std::cin
получения первого слова.
Ответ 2
Возьмем std::cin.getline()
отдельно. Во-первых, там std::
. Это пространство имен, в котором живет стандартная библиотека. Он имеет сотни типов, функций и объектов.
std::cin
- такой объект. Это стандартный объект ввода символов, определенный в <iostream>
. У этого есть свои собственные методы, но вы также можете использовать его со многими свободными функциями. Большинство из этих методов и функций - это способы получения одного или нескольких символов из стандартного ввода.
Наконец, .getline()
является одним из таких методов std::cin
(и других подобных объектов). Вы скажете, сколько символов он должен получить от объекта на левой стороне (std::cin
здесь) и куда поместить эти символы. Точное количество символов может варьироваться: .getline()
остановится в трех случаях:
1. Достигнут конец линии
2. На входе нет символов (обычно это не происходит на std::cin
, поскольку вы можете продолжать печатать)
3. Прочитано максимальное количество символов.
Существуют и другие методы и функции, которые могут использоваться с объектом std::cin
, например
std::string s;
int i;
std::cin >> s; // Read a single word from std::cin
std::cin >> i; // Read a single number from std::cin
std::getline(std::cin, s); // Read an entire line (up to \n) from std::cin
std::cin.ignore(100); // Ignore the next 100 characters of std::cin
Ответ 3
Вы прочитали какую-либо документацию (например, http://www.cplusplus.com/reference/string/getline/)?
В принципе, std::cin
(или, более широко, любой std::istream
) используется непосредственно для получения форматированного ввода, например. int x; std::cin >> x;
. std::cin.getline()
используется просто для заполнения буфера char *
.
Ответ 4
Как уже другие ответили (даже лучше) грубо говоря, используйте getline()
для чтения всей строки (т. getline()
, заканчивающейся \n
) и cin>>var
для чтения числа, совместимого с типом var
(integer, float, двойной и т.д.) или одно слово.
В этом ответе я хочу подчеркнуть проблему, которая возникает при смешении двух методов. Когда вы делаете:
int a;
string s;
cin>>a;
getline(cin, s)
cin
оставляет конец строки, \n
, символ, который затем читается getline();
, Эту проблему можно решить, используя cin.ignore()
.
int a;
string s;
cin>>a;
cin.ignore();
getline(cin, s)