getline cin str что это значит

Как ввести в cin строки с пробелами в С++

По умолчанию cin (стандартный ввод) в С++ считывает данные до первого пробела. Рассмотрим способы, с помощью которых мы можем передать через стандартный ввод строку, содержащую один или нескольких пробелов, чтобы эта строка могла быть присвоена в качестве значения переменной в программе.

cin по умолчанию пропускает все белые пробелы (пробелы, табуляции, новые строки и т. д.). Вы можете либо изменить его поведение, либо использовать немного другой механизм.

Рассмотрим небольшую программу, которая просит пользователя ввести имя и после этого сразу же отображает введённую строку на экране. Приведённый код работает так, как ожидается, если вводимые данные не содержат пробелов:

Для запуска этого кода сохраните его в файл test.cpp и скомпилируйте:

Запуск скомпилированного файла:

Попробуем ввести строку с пробелами:

getline cin str что это значит. Смотреть фото getline cin str что это значит. Смотреть картинку getline cin str что это значит. Картинка про getline cin str что это значит. Фото getline cin str что это значит

Как можно увидеть, из введённой строки «Алексей Милосердов», сохранилось только часть до пробела, то есть «Алексей».

Чтение строки с getline

getline cin str что это значит. Смотреть фото getline cin str что это значит. Смотреть картинку getline cin str что это значит. Картинка про getline cin str что это значит. Фото getline cin str что это значит

Как можно убедиться, теперь строка считалась полностью, вместе с пробелами.

Изменение поведения cin с помощью noskipws

Как мы уже выяснили, по умолчанию cin пропускает все белые пробелы (пробелы, табуляции, новые строки и т. д.). Чтобы изменить его поведение, используйте манипулятор noskipws следующим образом:

noskipws включает пропуск начальных пробелов с помощью форматированных функций ввода (по умолчанию включено). Не влияет на вывод.

То есть noskipws не поможет нам передать через стандартный ввод строки, содержащие в себе пробелы, кроме тех случаев, когда пробелы стоят в начале строки.

Чтобы стало понятнее, рассмотрим следующий код:

В результате работы этого кода будет выведено:

Смотрите также онлайн учебник «Основы С++».

Источник

Функции

getline

Извлекает строки из входного потока, последовательно по одной строке.

Параметры

in_stream
Входной поток, из которого извлекается строка.

str
Строка, в которую считываются символы из входного потока.

delimiter
Разделитель строк.

Возвращаемое значение

Remarks

Вторая функция каждой пары является аналогом первой из них для поддержки rvalue ссылок.

Извлечение останавливается при возникновении одного из следующих условий.

Если возникает исключение in_stream и str они остаются в допустимом состоянии.

Пример

Параметры

str
Последовательность символов для преобразования.

idx
Значение индекса первого непреобразованного символа.

Возвращаемое значение

double Значение.

Remarks

Преобразует последовательность символов в число с плавающей запятой.

Параметры

str
Последовательность символов для преобразования.

idx
Значение индекса первого непреобразованного символа.

Возвращаемое значение

float Значение.

Remarks

Преобразует последовательность символов в целое число.

Возвращаемое значение

Параметры

str
Последовательность символов для преобразования.

idx
Значение индекса первого непреобразованного символа.

base
Используемое числовое основание.

Remarks

Функция stoi преобразует последовательность символов в str в значение типа int и возвращает значение. Например, если передать последовательность символов «10», stoi возвращает целочисленное значение 10.

Параметры

str
Последовательность символов для преобразования.

idx
Значение индекса первого непреобразованного символа.

base
Используемое числовое основание.

Возвращаемое значение

Длинное целое значение.

Remarks

stold

Параметры

str
Последовательность символов для преобразования.

idx
Значение индекса первого непреобразованного символа.

Возвращаемое значение

long double Значение.

Remarks

stoll

Параметры

str
Последовательность символов для преобразования.

idx
Значение индекса первого непреобразованного символа.

base
Используемое числовое основание.

Возвращаемое значение

long long Значение.

Remarks

stoul

Преобразует последовательность символов в длинное целое без знака.

Параметры

str
Последовательность символов для преобразования.

idx
Значение индекса первого непреобразованного символа.

base
Используемое числовое основание.

Возвращаемое значение

Длинное целое значение без знака.

Remarks

stoull

Параметры

str
Последовательность символов для преобразования.

idx
Значение индекса первого непреобразованного символа.

base
Используемое числовое основание.

Возвращаемое значение

unsigned long long Значение.

Remarks

Меняет местами массивы символов двух строк.

Параметры

left
Одна строка, элементы которой должны быть заменены элементами другой строки.

right
Другая строка, элементы которой будут заменены на элементы первой строки.

Remarks

Пример

to_string

Параметры

value
Преобразуемое значение.

Возвращаемое значение

Remarks

«%d» Если value имеет тип int

«%u» Если value имеет тип unsigned int

«%ld» Если value имеет тип long

«%lu» Если value имеет тип unsigned long

«%lld» Если value имеет тип long long

«%llu» Если value имеет тип unsigned long long

«%f» Если value имеет тип float или double

«%Lf» Если value имеет тип long double

to_wstring

Преобразует значение в расширенную строку.

Параметры

value
Преобразуемое значение.

Возвращаемое значение

Расширенная строка, представляющая значение.

Remarks

L»%d» Если value имеет тип int

L»%u» Если value имеет тип unsigned int

L»%ld» Если value имеет тип long

L»%lu» Если value имеет тип unsigned long

L»%lld» Если value имеет тип long long

L»%llu» Если value имеет тип unsigned long long

L»%f» Если value имеет тип float или double

L»%Lf» Если value имеет тип long double

Источник

Урок №208. Функционал класса istream

Обновл. 15 Сен 2021 |

Оператор извлечения

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

Что произойдет, если пользователь введет 20 символов? Правильно, переполнение. Одним из способов решения этой проблемы является использование манипуляторов. Манипулятор — это объект, который применяется для изменения потока данных с использованием операторов извлечения ( >> ) или вставки ( ).

Мы уже работали с одним из манипуляторов — endl, который одновременно выводит символ новой строки и удаляет текущие данные из буфера. Язык C++ предоставляет еще один манипулятор — setw() (из заголовочного файла iomanip), который используется для ограничения количества символов, считываемых из потока. Для использования setw() вам нужно просто передать в качестве параметра максимальное количество символов для извлечения и вставить вызов этого манипулятора следующим образом:

Эта программа теперь прочитает только первые 11 символов из входного потока (+ один символ для нуль-терминатора). Все остальные символы останутся в потоке до следующего извлечения.

Извлечение и пробелы

Важный момент: оператор извлечения работает с «отформатированными» данными, т.е. он игнорирует все пробелы, символы табуляции и символ новой строки. Например:

Если пользователь введет следующее:

Hello! My name is Anton

То оператор извлечения пропустит все пробелы и символы новой строки. Следовательно, результат выполнения программы:

Часто пользовательский ввод все же нужен со всеми его пробелами. Для этого класс istream предоставляет множество функций. Одной из наиболее полезных является фунция get(), которая извлекает символ из входного потока. Вот вышеприведенная программа, но уже с использованием функции get():

Теперь, если мы введем следующее:

Hello! My name is Anton

Hello! My name is Anton

Функция get() также имеет строковую версию, в которой можно указать максимальное количество символов для извлечения. Например:

Если мы введем следующее:

Hello! My name is Anton

Обратите внимание, программа считывает только первые 11 символов (+ нуль-терминатор). Остальные символы остаются во входном потоке.

Один важный нюанс: функция get() не считывает символ новой строки! Например:

Если пользователь введет следующее:

И программа сразу же завершит свое выполнение! Почему так? Почему не срабатывает второй ввод данных? Дело в том, что первый get() считывает символы до символа новой строки, а затем останавливается. Второй get() видит, что во входном потоке все еще есть данные и пытается их извлечь. Но первый символ, на который он натыкается — символ новой строки, поэтому происходит второй «Стоп!».

Для решения данной проблемы класс istream предоставляет функцию getline(), которая работает точно так же, как и функция get(), но при этом может считывать символы новой строки:

Этот код работает точно так, как ожидается, даже если пользователь введет строку с символом новой строки.

Если вам нужно узнать количество символов, извлеченных последним getline(), используйте функцию gcount():

Hello! My name is Anton
24 characters were read

Специальная версия функции getline() для std::string

Еще несколько полезных функций класса istream

функция ignore() — игнорирует первый символ из потока;

функция ignore(int nCount) — игнорирует первые nCount (количество) символов из потока;

функция peek() — считывает символ из потока, при этом не удаляя его из потока;

функция unget() — возвращает последний считанный символ обратно в поток, чтобы его можно было извлечь в следующий раз;

функция putback(char ch) — помещает выбранный вами символ обратно в поток, чтобы его можно было извлечь в следующий раз.

Класс istream содержит еще множество других полезный функций и их вариаций, но это уже тема для отдельного туториала.

Поделиться в социальных сетях:

Источник

Русские Блоги

Подробное объяснение cin, cin.get (), getline ()

Тест первый: abcd ( Enter) abcd (вывод) efgh (ввод) efgh (вывод) Если количество вводимых пользователем символов строки впервые меньше 4, программа выполняется нормально!

Тест два: abcdefgh (Enter) abcd ( (Вывод) (вывод строки) Когда число символов, введенных пользователем в первый раз, больше 4, первая строка принимает первые четыре символа ввода, а вторая операция ввода не выполняется, вторая строка Выход пуст. (Обнаружение суперлиги Getline, не будет выполнять Cin после)

ВАЖНО: Когда cin >> читает данные из буфера, если первый символ в буфере является разделителем пробела, табуляции или новой строки, cin >> будет игнорировать и очищать его, Продолжайте читать следующий символ, если буфер пуст, продолжайте ждать. Однако, если чтение прошло успешно, разделитель после символа остается в буфере, а cin >> не обрабатывается 。 ( понимание )

Примечание:

getline cin str что это значит. Смотреть фото getline cin str что это значит. Смотреть картинку getline cin str что это значит. Картинка про getline cin str что это значит. Фото getline cin str что это значит

2、cin.get()

Функция имеет три формата: без параметров, один параметр, два параметра: cin.get (), cin.get (char ch), cin.get (array_name, Arsize) Чтение персонажей: Введите конечное условие: введите Обработка символов завершения пары ключей: Не сбрасывайте Enter в буфере пробел и таб (важно) 。 cin.get () и cin.get (char ch) используются для чтения символов, и их использование аналогично, то есть: ch = cin.get () и cin.get (ch) эквивалентны.

cin.get(array_name, Arsize) Используется для чтения строки, может принимать пробелы, встречается Enter Завершить ввод, прочитать символы в соответствии с длиной (Arsize), будет Отменить последний ввод символа Важно, но не выбрасывайте ПРОБЕЛ и TAB

3、cin.getline()

4, функция ошибки cin

Механизм обработки ошибок cin, и изучите несколько важных функций: cin.fail (), cin.bad (), cin.good (), cin.clear (), cin.ignore () и т. Д.

ios :: badbit 001 В потоке ввода (вывода) произошла фатальная ошибка, которая необратима

ios :: eofbit 010 достиг конца файла

ios::failbit 100 Не фатальная ошибка во входном (выходном) потоке может быть исправлена

Соответствующая функция 1 or true if rdstate & XX bit is nonzero; otherwise 0。

Недостаточно сбросить флаг ошибки! Было бы хорошо, если бы оставшиеся данные в буфере могли быть очищены! Давайте посмотрим на очень важную функцию ниже!

Источник

Функции-члены потока ввода

Функции — члены потока ввода используются для дисковых операций ввода.

открыт

Если используется входной поток файлов ( ifstream ), необходимо связать этот поток с конкретным файлом диска. Это можно сделать в конструкторе или можно использовать open функцию. В любом случае аргументы одни и те же.

При открытии файла, связанного с входным потоком, обычно указывается флаг ios_base:: OpenMode (режим по умолчанию — ios::in ). Список openmode флагов см. в разделе ios_base:: OpenMode. Флаги могут быть объединены с помощью побитового оператора OR (|).

Чтобы прочитать файл, сначала используйте функцию- fail член, чтобы определить, существует ли она:

Получить

Неформатированная get функция элемента работает как >> оператор с двумя исключениями. Во-первых, get функция включает пробелы, в то время как средство извлечения исключает пробелы при skipws установке флага (по умолчанию). Во-вторых, эта get функция менее вероятно приведет к тому, что связанный поток вывода ( cout например,) будет сброшен.

Вариант get функции указывает адрес буфера и максимальное число считываемых символов. Это полезно для ограничения количества символов, отправленных в конкретную переменную, как показано в примере:

Входные данные

Пример выходных данных

getline

getline Функция-член аналогична get функции. Обе функции допускают третий аргумент, который указывает завершающий символ для входных данных. Значение по умолчанию — символ новой строки. Обе функции резервируют один символ для необходимого завершающего символа. Однако get оставляет завершающий символ в потоке и getline удаляет завершающий символ.

В следующем примере задается завершающий символ для потока ввода:

Входные данные

Просмотр

Этот пример считывает двоичную запись из файла заработной платы в структуру:

Программа предполагает, что записи данных форматируются точно так же, как указано в структуре, без завершающего возврата каретки или символов перевода строки.

функции seekg и tellg

Чтобы использовать seekg для реализации систем управления данными, ориентированных на записи, умножьте размер записи фиксированной длины на номер записи, чтобы получить координату байта относительно конца файла, а затем используйте get объект для чтения записи.

выхода

close Функция члена закрывает файл диска, связанный с входным файлом потока, и освобождает файл операционной системы. ifstream Деструктор закрывает файл, но функцию можно использовать, close Если необходимо открыть другой файл для того же объекта потока.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *