Getline c что это
ssize_t getline(char **lineptr, size_t *n, FILE *stream);
ssize_t getdelim(char **lineptr, size_t *n, int delim, FILE *stream);
Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):
getline(), getdelim():
Начиная с glibc 2.10: _POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700 До glibc 2.10: _GNU_SOURCE
ОПИСАНИЕ
Если *lineptr равно NULL и *n равно 0 перед вызовом, то getline() выделит буфер для хранения строки. Этот буфер должен быть высвобожден программой пользователя, даже если getline() завершилась с ошибкой.
Как альтернатива, перед вызовом getline(), *lineptr может содержать указатель на буфер, выделенный с помощью malloc(3) размером *n байтов. Если буфер недостаточно велик для размещения строки, то getline() изменяет размер буфера с помощью realloc(3), обновляя *lineptr и *n при необходимости.
В любом случае при успешном выполнении вызова *lineptr и *n будут содержать правильный адрес буфера и его размер, соответственно.
Функция getdelim() работает аналогично getline(), за исключением того, что в аргументе delimiter можно задать разделитель строки, отличный от символа новой строки. Как и с getline(), символ-разделитель не добавляется, если его было в входных данных до конца файла.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Обе функции возвращают -1 при ошибках чтения строки (включая условие достижения конца файла). При возникновении ошибки в errno сохраняется её значение.
std::getline
getline читает символы из входного потока и помещает их в строку:
Parameters
| input | — | поток для получения данных от |
| str | — | строка для ввода данных |
| delim | — | разделительный символ |
Return value
Notes
При использовании ввода с разделителями-пробелами (например int n; std::cin >> n; ) все последующие пробелы, включая символ новой строки, останутся во входном потоке. Затем при переключении на линейный ввод первая строка, полученная с помощью getline , будет просто пробелом. В вероятном случае, когда это нежелательное поведение, возможные решения включают:
- Явный посторонний начальный вызов getline
- Удаление последовательных пробелов с помощью std::cin >> std::ws
- Игнорирование всех оставшихся символов в строке ввода с помощью cin.ignore(std::numeric_limits<std::streamsize>::max(), ‘\n’);
Example
В следующем примере демонстрируется, как использовать функцию getline для чтения ввода пользователя и построчную обработку файла.
Defect reports
Следующие отчеты о дефектах,изменяющих поведение,были применены ретроактивно к ранее опубликованным стандартам C++.
std:: getline (string)
Extracts characters from is and stores them into str until the delimitation character delim is found (or the newline character, '\n', for (2)).
The extraction also stops if the end of file is reached in is or if some other error occurs during the input operation.
If the delimiter is found, it is extracted and discarded (i.e. it is not stored and the next input operation will begin after it).
Note that any content in str before the call is replaced by the newly extracted sequence.
Each extracted character is appended to the string as if its member push_back was called.
Parameters
Return Value
The same as parameter is.
A call to this function may set any of the internal state flags of is if:
| flag | error |
|---|---|
| eofbit | The end of the source of characters is reached during its operations. |
| failbit | The input obtained could not be interpreted as a valid textual representation of an object of this type. In this case, distr preserves the parameters and internal data it had before the call. Notice that some eofbit cases will also set failbit. |
| badbit | An error other than the above happened. |
(see ios_base::iostate for more info on these)
Additionally, in any of these cases, if the appropriate flag has been set with is‘s member function ios::exceptions, an exception of type ios_base::failure is thrown.
Функция Getline C++
Изучение
Getline () используется для получения входной строки от пользователя в одной или нескольких строках до тех пор, пока не появится специальный символ (разделитель). Это предопределенная функция, которая использует библиотеку в программе, поскольку ее определение присутствует в файле заголовка библиотеки.
В этой статье будет объяснено множество основных примеров, объясняющих работу функции getline ().
Предварительное условие
Мы использовали версию Ubuntu 20.04; вы можете использовать последнюю версию. Для реализации вам понадобится текстовый редактор и доступ к терминалу Linux, потому что мы сможем видеть вывод исходных кодов на терминале через запрос.
Синтаксис функции getline ()
Функция getline () объясняется на основе параметров, которые используются внутри функции getline.
Теперь мы объясним каждый параметр этого синтаксиса один за другим.
- Str: этот параметр представляет строковый объект, в котором сохраняется входное значение, когда значение принимает его из входного потока.
- Delim: этот параметр представляет символ, который показывает разделитель, содержащий значение, до которого должна отображаться входная строка.
Пример 1
В этом примере используется простой пример функции getline () в программе. В простых программах на C ++ нам нужна библиотека iostream в простых программах на C ++, но здесь, помимо этой библиотеки, мы использовали другую библиотеку, которая использует getline () в исходном коде C ++.
Подойдя к основной программе, здесь объявляется строковая переменная для приема строкового сообщения от пользователя. Когда мы выполняем код в терминале, пользователь увидит отображаемое сообщение, в котором система просит пользователя ввести строковое сообщение; это сообщение будет отображаться снова после некоторого шествия. Функция getline () примет предложение, введенное пользователем.
То же сообщение будет отображаться без каких-либо изменений. Мы внесем некоторые изменения после того, как значение будет введено в будущих примерах.
Сохраните код в файле с расширением C ++ / c.

Выполните команду в терминале Ubuntu. Для компиляции исходного кода нам понадобится компилятор. Для кода C ++ нам понадобится компилятор G ++ для компиляции кода.
После выполнения отображается сообщение; вам нужно ввести ваше сообщение. Чтобы система отображала вывод.

Теперь мы предлагаем тот же сценарий по-разному. Как мы знаем, как и функция getline, cin также используется для получения значения от пользователя. Но есть некоторые недостатки использования cin вместо функции getline или вместе с ней. Здесь мы использовали пример, в котором мы использовали cin вместо getline, чтобы увидеть эффект этого изменения. Все остальное то же самое. Например, библиотеки такие же. Вся программа написана внутри основной программы.

Теперь сохраните файл и запустите его в терминале Ubuntu. Когда мы компилируем код и затем выполняем его, система снова потребует от нас строковое сообщение. Мы напишем такую же строку. Используя клавишу «ENTER», вы увидите, что вся строка не отображается. Отображается только одна часть строки. Это потому, что «cin» принимает значение из всей строки, пока не найдет первый пробел. Это причина того, что выходная мощность меньше оригинальной. Чтобы принять всю строку, используйте функцию getline (). Скомпилируйте код и затем выполните его.

Пример 2
В предыдущем примере, как и в случае использования cin, мы ограничили значение. Но в «cin» это очевидно; значение всегда уменьшается до первого пробела в данной строке. Но в этом примере с помощью функции getline () мы ограничили значение в операторе ввода, применив особое условие. По заданному условию в программе мы предоставляем алфавит. При выполнении кода, когда этот алфавит появляется во всей строке впервые, компилятор перестает печатать всю строку, и фрагмент строки от начала до этого алфавита отображается на экране в качестве результирующего значения.
В этом примере вы можете видеть, что мы использовали «I» в функции getline () внутри исходного кода. Вы можете использовать любой другой алфавит по своему усмотрению.

Теперь, после компиляции, выполните код на терминале. Из полученного значения ясно, что мы использовали «I» во входной строке, поэтому алфавиты, которые идут перед этим алфавитом, будут отображаться как выходные.

Пример 3
В этом примере вместо использования алфавита для отображения критериев мы используем здесь порядковый номер. При этом компилятор получит желаемую запись в соответствии с порядковым номером. Номер индекса, указанный в функции, прекратит дальнейшую выборку записи. Например, мы использовали число «7», поэтому сообщение будет отображаться в позиции 6 в индексе.
В этом примере вы также увидите, что есть небольшое изменение в написании функции getline (). В предыдущем примере мы использовали cin внутри параметров getline. Но на этот раз мы использовали другую технику написания этой функции.

Когда мы выполним код, мы увидим, что мы ввели имя, состоящее из двух слов с пробелом между ними. Но подав заявку на участие в программе, мы увидим, что название отображается до 6 позиции индекса.

Пример 4
В этом примере будет отображаться строка, так что каждое слово будет отображаться на следующей строке. В этом примере используется новая библиотека вместо других, поскольку функция этой библиотеки уже включает потоковую передачу ввода / вывода. А также позволяет читать и писать в файл. Это также включает побитовое отображение значений строки. Дайте нам знать, чтобы понять пример. Одна переменная получает значение, предоставленное пользователем через функцию getline. Другая переменная помогает разделить слова в строке и переместить их на следующую строку.
После получения значения это значение затем делит значение и помещает его в другую переменную «x». для функции отображения; мы будем использовать здесь цикл while.
В соответствии с циклом значение будет печататься до тех пор, пока значение не будет указано в операторе. Тело цикла берет одно слово из полного предложения и разрезает его там, где пробел присутствует или стоит первым. Это условие задается в цикле.

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

Заключение
В этой статье показаны некоторые элементарные примеры, объясняющие концепцию функции getline (). Вы можете использовать операционную систему Linux для уточнения. Мы объяснили несколько примеров, чтобы объяснить работу этой функции. В каждом примере работа этой функции изображена по-разному.