Visual studio ввод вывод c
По умолчанию язык C++ не содержит встроенных средств для ввода с консоли и вывода на консоль, эти средства предоставляются библиотекой iostream . В ней определены два типа: istream и ostream . istream представляет поток ввода, а ostream - поток вывода.
Вобще сам темин "поток" в данном случае представляет последовательность символов, которая записывается на устройство ввода-вывода или считывается с него. И в данном случае под устройством ввода-вывода рассматривается консоль.
Для записи или вывода символов на консоль применяется объект cout , который представляет тип ostream. А для чтения с консоли используется объект cin
Для использования этих объектов в начало исходного файла необходимо подключить библиотеку iostream:
Вывод на консоль
Консольный вывод программы:
Строки могут содержать управляющие последовательности, которые интерпретируются определенным образом. Например, последовательность "\n" интерпретируется как перевод на новую строку. Из других управляющих последовательностей также нередко употребляется "\t", которая интерпретируется как табуляция.
Ввод с консоли
Для считывания с консоли данных применяется оператор ввода >> , который принимает два операнда. Левый операнд представляет объект типа istream (в данном случае объект cin), с которого производится считывание, а правый операнд - объект, в который считываются данные.
Например, считаем данные с консоли:
Здесь после приглашений к вводу программа ожидает ввода значений для переменных age и weight.
Пример работы программы:
Стоит отметить, что так оператор ввода в первом случае будет добавлять данные в целочисленную переменную age, то он ожидает ввода числа. В случае с переменной weight оператор ввода ожидает дробное число, причем разделителем целой и дробной части должна быть точка. Поэтому мы не можем ввести любые значения, например, строки. В этом случае программа может выдать некорректный результат.
Оператор ввода >> возвращает левый операнд - объект cin, поэтому мы можем по цепочке считывать данные в различные переменные:
Пример работы программы:
После ввода одного из значений надо будет ввести пробел и затем вводить следующее значение.
Исходная версия продукта: Visual C++
Исходный номер базы знаний: 307398
Заключение
Чтобы упростить переход, ознакомьтесь с разделом "Использование FileSystemObject с Visual Basic".
- System::ComponentModel
- System::Windows::Forms
- System::Drawing
Демонстрация операций ввода-вывода файлов
В примерах в этой статье описываются основные операции ввода-вывода файлов. В пошаговом примере раздела описано, как создать пример программы, демонстрирующий следующие шесть операций ввода-вывода файлов:
Чтение текстового файла
В следующем примере кода для StreamReader чтения текстового файла используется класс. Содержимое файла добавляется в элемент управления ListBox. Блок try. catch используется для оповещения программы, если файл пуст. Существует множество способов определить, когда достигается конец файла. В этом примере метод Peek используется для проверки следующей строки перед ее чтением.
В Visual C++ необходимо добавить параметр компилятора поддержки среды CLR (/clr:oldSyntax), чтобы успешно скомпилировать предыдущий пример кода как управляемый C++. Чтобы добавить параметр компилятора поддержки среды CLR, выполните следующие действия.
Щелкните Project и нажмите кнопку "Свойства".
— это заполнитель для имени проекта.
Разверните свойства конфигурации и нажмите кнопку "Общие".
В правой области щелкните, чтобы выбрать поддержку среды CLR, старый синтаксис (/clr:oldSyntax) в параметрах проекта поддержки среды CLR.
Чтобы выполнить поиск абонентской группы для пользователя в поле Абонентская группа (телефонный контекст), нажмите кнопку Обзор.
Написание текстового файла
В этом примере кода используется StreamWriter класс для создания и записи в файл. Если у вас уже есть файл, его можно открыть таким же образом.
Просмотр сведений о файле
Этот пример кода использует класс FileInfo для доступа к свойствам файла. Notepad.exe в этом примере. Свойства отображаются в элементе управления ListBox.
Вывод списка дисков
В этом примере кода используются Directory классы Drive и классы для перечисления логических дисков в системе. В этом примере результаты отображаются в элементе управления ListBox.
Перечисление вложенных папок
В этом примере кода GetDirectories используется метод Directory класса для получения списка папок.
Список файлов
В этом примере кода GetFiles используется метод класса Directory для получения списка файлов.
Если пользователь получает доступ к файлам, может быть много ошибок. Файлы могут не существовать, файлы могут использоваться или пользователи могут не иметь прав на файлы папок, к которым они пытаются получить доступ. Учитывайте эти возможности при написании кода для обработки исключений, которые могут быть созданы.
Пошаговый пример
В меню Файл выберите пункт Создать и затем пункт Проект.
Введите KB307398 в поле "Имя", C:\ введите поле "Расположение" и нажмите кнопку "ОК ".
Откройте форму Form1 в конструкторе и нажмите клавишу F4, чтобы открыть окно свойств .
В окне "Свойства " разверните папку " Размер". В поле "Ширина " введите 700. В поле "Высота " введите 320.
Добавьте один элемент управления ListBox и шесть элементов управления Button в Form1.
Чтобы просмотреть панель элементов, щелкните "Панель элементов " в меню "Вид ".
В окне " Свойства" измените расположение, имя**, размер****,** табиндекс и текстовые свойства этих элементов управления следующим образом:
Откройте файл Form1.h . В объявлении Form1 класса объявите одну частную переменную String со следующим кодом:
В конструктор Form1 класса добавьте следующий код:
Для выполнения операций ввода входных данных файла добавьте пространство System::IO имен.
Нажмите клавиши SHIFT+F7, чтобы открыть form1 в режиме конструктора. Дважды щелкните кнопку "Прочитать текстовый файл" и вставьте следующий код:
В режиме конструктора Form1 дважды нажмите кнопку "Записать текстовый файл" и вставьте следующий код:
В режиме конструктора Form1 дважды нажмите кнопку "Просмотреть сведения о файле" и вставьте следующий код в метод:
В режиме конструктора Form1 дважды нажмите кнопку list Drives (Диски списка) и вставьте следующий код:
В режиме конструктора Form1 дважды щелкните кнопку "Вложенные папки списка" и вставьте следующий код:
В режиме конструктора Form1 дважды нажмите кнопку "Файлы списка" и вставьте следующий код:
Чтобы выполнить сборку и запуск программы, нажмите клавиши CTRL+F5.
Полный пример кода
Ссылки
Поточный ввод-вывод в C++ выполняется с помощью функций сторонних библиотек. В С++, как и в С, нет встроенных в язык средств ввода-вывода.
В С для этих целей используется библиотека stdio.h .
В С++ разработана новая библиотека ввода-вывода iostream , использующая концепцию объектно-ориентированного программирования:
Библиотека iostream определяет три стандартных потока:
Для их использования в Microsoft Visual Studio необходимо прописать строку:
Для выполнения операций ввода-вывода переопределены две операции поразрядного сдвига:
Вывод информации
Здесь значение преобразуется в последовательность символов и выводится в выходной поток:
Ввод информации
cin >> идентификатор;
При этом из входного потока читается последовательность символов до пробела, затем эта последовательность преобразуется к типу идентификатора, и получаемое значение помещается в идентификатор:
Возможно многократное назначение потоков:
cin >> переменная1 >> переменная2 >>. >> переменнаяn;
При наборе данных на клавиатуре значения для такого оператора должны быть разделены символами (пробел, \n, \t ).
Особого внимания заслуживает ввод символьных строк. По умолчанию потоковый ввод cin вводит строку до пробела, символа табуляции или перевода строки.
Для ввода текста до символа перевода строки используется манипулятор потока getline() :
Манипуляторы потока
Функцию - манипулятор потока можно включать в операции помещения в поток и извлечения из потока (>).
В С++ имеется ряд манипуляторов. Рассмотрим основные:
Пример Программа ввода-вывода значения переменной в C++
Та же программа, написанная на языке Си
Пример Использование форматированного вывода
Еще один пример использования форматированного вывода: для t∈[0;3] с шагом 0,5 вычислить значение y=cos(t).
Статья для русскоязычной аудитории. При попытке вывести текст новички столкнуться с тем, что выводится абра-кадабра и компилятор необходимо "обучить" русскому языку.А после "обучения", будет анти проблема - программа не будет понимать что ей вводят через cin.
Только при setlocale(LC_ALL, "Russian"); ввод cin будет так же иероглифами. Можете использовать этот вариант в функции main() SetConsoleCP(1251); SetConsoleOutputCP(1251);
Если в cout записать некое математическое выражение (например cout
Тогда и скобки выделить) Порядок выполнения операций можно отслеживать с помощью бинарного дерева. Каждая открывающая скобка опускает вычисления на 1 уровень вниз
Можно ли привести нормальный пример ввода чисел с клавиатуры в изначально пустой vector (не указывая его первоначального размера)? Пересмотрел много примеров в интернете, сам пользуюсь Problem solving with C++ W.Savitch, ничего толкового не нашел.Только примеры с предварительным запросом кол-ва желаемого ввести. Спасибо заранее
Эти функции обрабатывают данные различных размеров и форматов, — от одного символа до больших структур данных. Они также предоставляют возможность буферизации, которая может повысить производительность. Размер буфера потока по умолчанию составляет 4 КБ. Эти подпрограммы влияют только на буферы, созданные подпрограммами библиотеки времени выполнения, и не затрагивают буферы, созданные операционной системой.
Потоковые подпрограммы ввода-вывода
Подпрограмма | Использовать |
---|---|
clearerr , clearerr_s | Очистка индикатора ошибки для потока |
fclose | Закрытие потока |
_fcloseall | Закрытие всех открытых потоков, кроме stdin , stdout и stderr |
_fdopen , wfdopen | Связывание потока с дескриптором открытого файла |
feof | Проверка файла или потока на предмет конца |
ferror | Проверка на наличие ошибки в потоке |
fflush | Сброс потока в буфер или на запоминающее устройство |
fgetc , fgetwc | Считывание символа из потока (функциональные версии getc и getwc ) |
_fgetchar , _fgetwchar | Считать символ из stdin (функциональные версии getchar и getwchar ) |
fgetpos | Получение индикатора позиции потока |
fgets , fgetws | Считывание строки из потока |
_fileno | Получение дескриптора файла, связанного с потоком |
_flushall | Сброс всех потоков в буфер или запоминающее устройство |
fopen , _wfopen , fopen_s , _wfopen_s | Открытие потока |
fprintf , _fprintf_l , fwprintf , _fwprintf_l , fprintf_s , _fprintf_s_l , fwprintf_s , _fwprintf_s_l | Запись форматированных данных в поток |
fputc, fputwc | Запись символа в поток (функциональные версии putc и putwc ) |
_fputchar , _fputwchar | Запись символа в stdout (функциональные версии putchar и putwchar ) |
fputs , fputws | Запись строки в поток |
fread | Считывание неформатированных данных из потока |
freopen , _wfreopen , freopen_s , _wfreopen_s | Переназначение потокового указателя FILE , чтобы он указывал на новый файл или устройство |
fscanf , fwscanf , fscanf_s , _fscanf_s_l , fwscanf_s , _fwscanf_s_l | Считывание форматированных данных из потока |
fseek , _fseeki64 | Перемещение позиции в файле в заданное место |
fsetpos | Задание индикатора позиции в потоке |
_fsopen , _wfsopen | Открытие потока с совместным доступом к файлу |
ftell , _ftelli64 | Получение текущей позиции в файле |
fwrite | Запись неформатированных элементов данных в поток |
getc , getwc | Считывание символа из потока (версии-макросы fgetc и fgetwc ) |
getchar , getwchar | Считывание символа из stdin (версии-макросы fgetchar и fgetwchar ) |
_getmaxstdio | Возвращает количество одновременно открытых файлов, допустимое на уровне потокового ввода-вывода. |
gets_s , _getws_s | Считывание строки из stdin |
_getw | Считывание двоичного числа int из потока |
printf , _printf_l , wprintf , _wprintf_l , printf_s , _printf_s_l , wprintf_s , _wprintf_s_l | Запись форматированных данных в stdout |
putc , putwc | Запись символа в поток (версии-макросы fputc и fputwc ) |
putchar , putwchar | Запись символа в stdout (версии-макросы fputchar и fputwchar ) |
puts , _putws | Запись строки в поток |
_putw | Запись двоичного числа int в поток |
rewind | Перемещение позиции в файле в начало потока |
_rmtmp | Удаление временных файлов, созданных tmpfile |
scanf , _scanf_l , wscanf , _wscanf_l , scanf_s , _scanf_s_l , wscanf_s , _wscanf_s_l | Считывание форматированных данных из stdin |
setbuf | Управление потоковой буферизацией |
_setmaxstdio | Задание максимального числа одновременно открытых файлов на уровне потокового ввода-вывода |
setvbuf | Управление потоковой буферизацией и размером буфера |
_snprintf , _snwprintf , _snprintf_s , _snprintf_s_l , _snwprintf_s , _snwprintf_s_l | Запись форматированных данных указанной длины в строку |
_snscanf , _snwscanf , _snscanf_s , _snscanf_s_l , _snwscanf_s , _snwscanf_s_l | Считывают форматированные данные указанной длины из стандартного входного потока. |
sprintf , swprintf , sprintf_s , _sprintf_s_l , swprintf_s , _swprintf_s_l | Запись форматированных данных в строку |
sscanf , swscanf , sscanf_s , _sscanf_s_l, swscanf_s , _swscanf_s_l | Считывание форматированных данных из строки |
_tempnam , _wtempnam | Создание временного имени файла в заданном каталоге |
tmpfile , tmpfile_s | Создание временного файла |
tmpnam , _wtmpnam , tmpnam_s , _wtmpnam_s | Создание временного имени файла |
ungetc , ungetwc | Отправка символа обратно в поток |
_vcprintf , _vcwprintf , _vcprintf_s , _vcprintf_s_l , _vcwprintf_s , _vcwprintf_s_l | Вывод форматированных данных на консоль |
vfprintf , vfwprintf , vfprintf_s , _vfprintf_s_l , vfwprintf_s , _vfwprintf_s_l | Запись форматированных данных в поток |
vprintf , vwprintf , vprintf_s , _vprintf_s_l , vwprintf_s , _vwprintf_s_l | Запись форматированных данных в stdout |
_vsnprintf , _vsnwprintf , vsnprintf_s , _vsnprintf_s , _vsnprintf_s_l , _vsnwprintf_s , _vsnwprintf_s_l | Запись форматированных данных указанной длины в буфер |
vsprintf , vswprintf , vsprintf_s , _vsprintf_s_l , vswprintf_s , _vswprintf_s_l | Запись форматированных данных в буфер |
Файлы, открытые с помощью потоковых подпрограмм, по умолчанию буферизуются. Функции stdout и stderr сбрасываются, когда они полны или — при записи в символьное устройство — после каждого вызова библиотеки. Если программа завершается аварийно, буферы вывода могут не быть сброшены, что приводит к потере данных. С помощью fflush или _flushall можно гарантировать, что буфер, связанный с заданным файлом, или все открытые буферы будут сброшены в операционную систему, которая может кэшировать данные перед их записью на диск. Функция фиксации на диск гарантирует, что сброшенное содержимое буфера не потеряется в случае сбоя системы.
Существует два способа сохранить зафиксировать содержимое буфера на диске:
Скомпоновать код с файлом COMMODE.OBJ, чтобы установить глобальный флаг фиксации. По умолчанию этот глобальный флаг имеет значение n , т. е. "не фиксировать".
Установите флаг режима в c с помощью fopen или _fdopen .
Любой файл, открытый с флагом c или n , ведет себя в соответствии со значением флага, вне зависимости от состояния глобального флага фиксации.
Если программа не закрывает поток явно, поток автоматически закроется, когда завершится выполнение программы. Следует, однако, закрывать поток, когда программа завершает работу с ним, так как количество потоков, которые могут одновременно быть открыты, ограничено. Сведения об этом ограничении см. в разделе _setmaxstdio .
Ввод может следовать сразу за выводом только с промежуточным вызовом fflush или функции позиционирования в файле ( fseek , fsetpos или rewind ). Вывод может следовать за вводом без промежуточного вызова функции позиционирования в файле, если операция ввода обнаруживает конец файла.
Для вывода информации на консоль мы уже использовали встроенный метод Console.WriteLine . То есть, если мы хотим вывести некоторую информацию на консоль, то нам надо передать ее в метод Console.WriteLine:
Нередко возникает необходимость вывести на консоль в одной строке значения сразу нескольких переменных. В этом случае мы можем использовать прием, который называется интерполяцией:
Для встраивания отдельных значений в выводимую на консоль строку используются фигурные скобки, в которые заключается встраиваемое значение. Это можем значение переменной ( ) или более сложное выражение (например, операция сложения ). А перед всей строкой ставится знак доллара $.
При выводе на консоль вместо помещенных в фигурные скобки выражений будут выводиться их значения:
Есть другой способ вывода на консоль сразу нескольких значений:
Здесь мы видим, что строка в Console.WriteLine содержит некие числа в фигурных скобках: , , . Это плейсхолдеры, вместо которых при выводе строки на консоль будут подставляться некоторые значения. Подставляемые значения указываются после строки через запятую.
При этом важен порядок подобных плейсхолдеров. Например, в данном случае после строки первой указана переменная name, потом height и потом age. Поэтому значение переменной name будет всавляться вместо первого плейсхолдера - (нумерация начинается с нуля), height - вместо , а age - вместо . Поэтому в итоге пи выводе на консоль строка
будет заменена на
Console.Write
Кроме Console.WriteLine() можно также использовать метод Console.Write() , он работает точно так же за тем исключением, что не добавляет переход на следующую строку, то есть последующий консольный вывод будет выводиться на той же строке.
Консольный ввод
Кроме вывода информации на консоль мы можем получать информацию с консоли. Для этого предназначен метод Console.ReadLine() . Он позволяет получить введенную строку.
В данном случае все, что вводит пользователь, с помощью метода Console.ReadLine() передается в переменную name.
Пример работы программы:
Особенностью метода Console.ReadLine() является то, что он может считать информацию с консоли только в виде строки. Кроме того, возможная ситуация, когда для метода Console.ReadLine не окажется доступных для считывания строк, то есть когда ему нечего считывать, он возвращаает значение null , то есть, грубо говоря, фактически отсутствие значения. И чтобы отразить эту ситуацию мы определяем переменную name , в которую получаем ввод с консоли, как переменную типа string? . Здесь string указывает, что переменная может хранить значения типа string, то есть строки. А знак вопроса ? указывает, что переменная также может хранить значение null , то есть по сути не иметь никакого значения. Далее мы более подробно разберем null и как с ним работать.
Convert.ToInt32() (преобразует к типу int)
Convert.ToDouble() (преобразует к типу double)
Convert.ToDecimal() (преобразует к типу decimal)
Пример ввода значений:
При вводе важно учитывать текущую операционную систему. В одних культурах разделителем между целой и дробной частью является точка (США, Великобритания. ), в других - запятая (Россия, Германия. ). Например, если текущая ОС - русскоязычная, значит, надо вводить дробные числа с разделителем запятой. Если локализация англоязычная, значит, разделителем целой и дробной части при вводе будет точка.
Читайте также: