2011-01-20 6 views

ответ

18

В случае с char *, std::cin.getline Получение линии, а не std::cin Получение первого слова.

+6

Я не понимаю этого ответа. 'std :: cin' ничего не получает; это просто объект. Вы должны что-то сделать с ним (например, вызвать функцию-член, например 'get'), прежде чем что-либо сделать. –

+1

'char s1 [256], s2 [256]; std :: cin >> s1; cin.getline (s2, 256); ' – alvelcom

+3

' std :: cin >> s1' - это вызов глобальной функции 'istream & operator >> (istream &, char *)' –

9

Вы прочитали какую-либо документацию (например, http://www.cplusplus.com/reference/string/getline/)?

В основном, std::cin (или, в общем, любой std::istream) используется непосредственно для получения форматированного ввода, например. int x; std::cin >> x;. std::cin.getline() используется просто для заполнения необработанного буфера char *.

+3

член getline не получает вас 'std :: string', он используется для заполнения буфера' char * '. Линией getline, которая получает 'std :: string', является свободная функция' std :: getline'. – etarion

+0

@Oli. Да, я немного разбирался в документации, но не понял. Теперь, я думаю, это более понятно. Благодарю. – Simplicity

+0

@etarion: Хороший улов. Обновление ответа сейчас ... –

24

Возьмем 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 
Смежные вопросы