cin getline c описание функций

В С++, как и в С, нет встроенных в язык средств ввода-вывода.

В С для этих целей используется библиотека stdio.h .
В С++ разработана новая библиотека ввода-вывода iostream , использующая концепцию объектно-ориентированного программирования:

Библиотека iostream определяет три стандартных потока:

  • cin стандартный входной поток ( stdin в С)
  • cout стандартный выходной поток ( stdout в С)
  • cerr стандартный поток вывода сообщений об ошибках ( stderr в С)

Для их использования в Microsoft Visual Studio необходимо прописать строку:

Для выполнения операций ввода-вывода переопределены две операции поразрядного сдвига:

  • >> получить из входного потока
  • cout

Возможно многократное назначение потоков:
cout

Содержание

  1. Ввод информации
  2. Манипуляторы потока
  3. Решение
  4. Другие решения

Ввод информации

При этом из входного потока читается последовательность символов до пробела, затем эта последовательность преобразуется к типу идентификатора, и получаемое значение помещается в идентификатор:

Возможно многократное назначение потоков:
cin >> переменная1 >> переменная2 >>. >> переменнаяn;

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

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

Результат выполнения

Для ввода текста до символа перевода строки используется манипулятор потока getline() :

Результат выполнения

Манипуляторы потока

Функцию — манипулятор потока можно включать в операции помещения в поток и извлечения из потока ( >).

В С++ имеется ряд манипуляторов. Рассмотрим основные:

Манипулятор Описание endl Помещение в выходной поток символа конца строки ‘
‘ dec Установка основания 10-ой системы счисления oct Установка основания 8-ой системы счисления hex Установка основания 16-ой системы счисления setbase Вывод базовой системы счисления width(ширина) Устанавливает ширину поля вывода fill(‘символ’) Заполняет пустые знакоместа значением символа precision(точность) Устанавливает количество значащих цифр в числе (или после запятой) в зависимости от использования fixed fixed Показывает, что установленная точность относится к количеству знаков после запятой showpos Показывает знак + для положительных чисел scientific Выводит число в экспоненциальной форме get() Ожидает ввода символа getline(указатель, количество) Ожидает ввода строки символов. Максимальное количество символов ограничено полем количество

Пример Программа ввода-вывода значения переменной в C++

Та же программа, написанная на языке Си

Пример Использование форматированного вывода

Результат выполнения

Еще один пример использования форматированного вывода: для t∈[0;3] с шагом 0,5 вычислить значение y=cos(t).

Результат выполнения

Я новичок в программировании, и у меня есть несколько вопросов по get() а также getline() функции в C ++.

Мое понимание двух функций:

getline() Функция читает целую строку и использует символ новой строки, передаваемый клавишей Enter, чтобы отметить конец ввода. get() функция очень похожа getline() но вместо того, чтобы читать и отбрасывать символ новой строки, get() оставляет этот символ во входной очереди.

Книга (C ++ Primer Plus), которую я читаю, предлагает использовать get() над getline() , Мое замешательство в том, что это не getline() безопаснее, чем get() так как он обязательно заканчивает строку ‘
‘ , С другой стороны, get() будет просто зависать символ во входной очереди, таким образом потенциально вызывая проблему?

Решение

Есть эквивалентное количество преимуществ и недостатков, и, по сути, все зависит от того, что вы читаете: get() оставляет разделитель в очереди, что позволяет вам рассматривать его как часть следующего ввода. getline() сбрасывает его, поэтому следующий вход будет сразу после него.

Если вы говорите о символе новой строки из консольного ввода, имеет смысл отбросить его, но если мы рассмотрим ввод из файла, вы можете использовать в качестве «разделителя» начало следующего поля.

Что «хорошо» или «безопасно» делать, зависит от того, что вы делаете.

Другие решения

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

Задача очень проста: на вход поступает количество принимаемых строк, и затем сами строки. На выход должно выйти (через пробел) количество гласных в этих строках.

Когда вместо getline() я использую обычный cin>> , то все работает, но строки попадаются с пробелами, поэтому гласные считаются некорректно. Здесь же почему-то getline() каким-то образом «перебивает» cin сверху, и считывает количество строк как еще одну строку, как я понял из теста программы (но это не точно). Собственно, почему так происходит?

И еще, у меня такое ощущение, что я решаю задачу очень топорно, есть ли какое-то более элегантное решение?
Особенно меня смущает количество проверок в предикате. Если такое решение есть, можно и без STL, ей я пользуюсь исключительно в учебных целях, закрепляю, так сказать, пройденный материал.

Источник: computermaker.info

Понравилась статья? Поделиться с друзьями:
Ок! Компьютер
Добавить комментарий