Подтвердить что ты не робот

Std:: cin.getline() vs. std:: cin

Когда следует использовать std::cin.getline()? Чем он отличается от std::cin?

4b9b3361

Ответ 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)