Что такое стандартный ввод и вывод в программировании

Что такое стандартный ввод и вывод в программировании

Один из основных механизмов, который делает программу полезной является ввод/вывод. Все языки программирования имеют такой механизм. Среди операторов и ключевых слов нет ввода/вывода. Потому что в языке С++ ввод/вывод реализован в виде библиотеки. И вообще многие механизмы, которые делают язык С++ таким мощным реализованы в библиотеках (стандартные, специализированные, персональные).

Вывод: Помещение (направление) данных в поток вывода осуществляется с помощью оператора cout

Можно определить операторы потокового ввода/вывода и для созданных абстрактных типов данных.

Ввод: Ввод данных из потока осуществляется аналогично с использованием обратного оператора >> (inserter):

Переменную любого временного типа можно ввести (считать) из потока:

Для использования стандартной библиотеки нужно включить ее описание в текст программы. Это делается с помощью директивы препроцессору #include.

#include // подключение стандартной библиотеки
using namespace std; // объявление об использовании стандартного пространства имен

void main() // функция main
<
cout

Форматированный ввод/вывод

Примеры, которые приводились выше и ввод/вывод, который вы использовали на практических занятиях до сих пор, обычно называют неформатированным выводом.

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

Управление можно организовать используя манипуляторы потока, которые вставляются между объектами (записываемыми или читаемыми) и тем самым изменяют состояние потока (формат вывода значений):

для вывода целых чисел

dec; // устанавливает десятичную систему счисления
hex; // устанавливает шестнадцатеричную систему счисления
oct; // устанавливает восьмеричную систему счисления
setbase(int b); // вывод целых чисел в системе счисления с основанием b(10,8. )
show base; // показывает основание системы счисления

для вывода чисел с плавающей точкой

float f=1234.56789;
cout

для вывода логических переменных

Дополнительно можно определить ширину вывода переменных в количестве символов:

setw(int n); // если строка или число длиннее, то будут выведены все setw(0)

А также задать символ для заполнения

Можно определить место размещения заполнителей. По умолчанию как видите заполнители размещаются до значения. Это аналогично записи:

endl; // заканчивается строка, т.е. вставляется символ ‘\n’
ends; // заканчивается строка записью ‘ ‘
flush; // очистка буфера потока

Это лишь основные манипуляторы, которые вы можете использовать для форматирования. С остальными познакомьтесь самостоятельно:

Манипулятор Действие на поток
showbase
noshowbase
инициирует отображение основания системы счисления
showpos
noshowpos
инициирует явное отображение знака (+) для положительных значений
uppercase
nouppercase
инициирует преобразование выводимых символов в верхний регистр
showpoint
noshowpoint
инициирует отображение десятичной точки при выводе вещественных чисел
skipws
noskipws
инициирует пропуск пробельных символов при вводе
left инициирует левое выравнивание, заполнение справа
right инициирует правое выравнивание, заполнение слева
internal инициирует внутреннее заполнение (между значением и знаком или основанием системы счисления)
scientific инициирует вывод вещественных значений в научном формате (d.ddddddddE+dd)
fixed инициирует вывод вещественных значений в фиксированном формате (d.dddddd)
setbase (int base) изменяет систему счисления (10, 8, 16)
dec инициирует вывод целочисленных значений в десятичной системе счисления
oct инициирует вывод целочисленных значений в восьмеричной системе счисления
hex инициирует вывод целочисленных значений в шестнадцатеричной системе счисления
setfill (char n) задает заполняющий символ
setprecision (int n) изменяет точность выводимых значений
setw (int n) задает ширину поля вывода

Файловые потоки

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

void main()
<
ifstream inputfile(«z:\data.txt»); // создается поток ввода из файла
inputfile>>x; // все то же самое что и для cin
ofstream outputfile(«z:\res.txt»); // создается поток вывода в файл
outputfile

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

По умолчанию файл открываемый для вывода создается (если он создан), а если существует, то очищается. Для того чтобы открыть файл для добавления:

Можно создать файловый поток, который запускает и ввод и вывод:

Источник

Ввод-вывод в Си

Основной задачей программирования является обработка информации, поэтому любой язык программирования имеет средства для ввода и вывода информации. В языке Си нет операторов ввода-вывода.

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

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

Общая форма записи функции printf() :

СтрокаФорматов состоит из следующих элементов:

Объекты могут отсутствовать.

Управляющие символы не выводятся на экран, а управляют расположением выводимых символов. Отличительной чертой управляющего символа является наличие обратного слэша ‘\’ перед ним.

Основные управляющие символы:

Форматы нужны для того, чтобы указывать вид, в котором информация будет выведена на экран. Отличительной чертой формата является наличие символа процент ‘%’ перед ним:

Результат работы программы

Тот же самый код может быть представлен с использованием одного вызова printf :

Табличный вывод

При указании формата можно явным образом указать общее количество знакомест и количество знакомест, занимаемых дробной частью:

В приведенном примере 10 — общее количество знакомест, отводимое под значение переменной; 5 — количество позиций после разделителя целой и дробной части (после десятичной точки). В указанном примере количество знакомест в выводимом числе меньше 10, поэтому свободные знакоместа слева от числа заполняются пробелами. Такой способ форматирования часто используется для построения таблиц.

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

Функция форматированного ввода данных с клавиатуры scanf() выполняет чтение данных, вводимых с клавиатуры, преобразует их во внутренний формат и передает вызывающей функции. При этом программист задает правила интерпретации входных данных с помощью спецификаций форматной строки.
Общая форма записи функции scanf( ) :

Строка форматов и список аргументов для функции обязательны.

Результат работы программы:

Функция scanf( ) является функцией незащищенного ввода, т.к. появилась она в ранних версиях языка Си. Поэтому чтобы разрешить работу данной функции в современных компиляторах необходимо в начало программы добавить строчку

Комментариев к записи: 96

#include
#include
#include
#include

int main() <
int a[4][5];
int i,j,range,max,maxi,maxj;
float kproiz1,kproiz2;
int proiz1=1;
int proiz2=1;

Источник

Стандартные библиотеки C ++ предоставляют расширенный набор возможностей ввода / вывода, которые мы увидим в последующих главах. В этой главе будут рассмотрены основные и наиболее распространенные операции ввода-вывода, необходимые для программирования на C ++.

Файлы заголовков библиотеки ввода-вывода

Этот файл объявляет службы для обработки файлов, управляемых пользователем. Мы обсудим это подробно в главе «Файл и поток».

Стандартный выходной поток (cout)

Оператор ввода может использоваться более одного раза в одном выражении, как показано выше, и endl используется для добавления новой строки в конце строки.

Стандартный входной поток (cin)

Компилятор C ++ также определяет тип данных введенного значения и выбирает соответствующий оператор извлечения потока для извлечения значения и сохранения его в данных переменных.

Оператор извлечения потока >> может использоваться более одного раза в одном выражении. Чтобы запросить более одного элемента данных, вы можете использовать следующее:

Это будет эквивалентно следующим двум утверждениям:

Стандартный поток ошибок (cerr)

Когда приведенный выше код компилируется и выполняется, он производит следующий результат:

Стандартный поток журнала (засорение)

Когда приведенный выше код компилируется и выполняется, он производит следующий результат:

Вы не сможете увидеть какие-либо различия в cout, cerr и clog с этими небольшими примерами, но при написании и выполнении больших программ разница становится очевидной. Поэтому хорошей практикой является отображение сообщений об ошибках с использованием потока cerr и при отображении других сообщений журнала, которые следует использовать.

Источник

Что такое стандартный ввод и вывод в программировании

Под вводом-выводом в программировании понимается процесс обмена информацией между оперативной памятью и внешними устройствами: клавиатурой, дисплеем, магнитными накопителя­ми и т. п. Ввод — это занесение информации с внешних устройств в оперативную память, а вывод — вынос информации из опера­тивной памяти на внешние устройства. Такие устройства, как дис­плей и принтер, предназначены только для вывода; клавиатура — устройство ввода. Магнитные накопители (диски, ленты) исполь­зуются как для ввода, так и для вывода.

Основным понятием, связанным с информацией на внешних устройствах ЭВМ, является понятие файла. Всякая операция вво­да-вывода трактуется как операция обмена с файлами: ввод — это чтение из файла в оперативную память; вывод — запись инфор­мации из оперативной памяти в файл. Поэтому вопрос об органи­зации в языке программирования ввода-вывода сводится к вопро­су об организации работы с файлами.

Внутренний файл — это переменная файлового типа, являющаяся структурированной величиной. Элементы файловой переменной могут иметь разный тип и, со­ответственно, разную длину и форму внутреннего представле­ния. Внутренний файл связывается с внешним (физическим) файлом с помощью стандартной процедуры Assign. Один эле­мент файловой переменной становится отдельной записью во внешнем файле и может быть прочитан или записан с помощью одной команды. Попытка записать в файл или прочитать из него величину, не совпадающую по типу с типом элементов файла, приводит к ошибке.

Аналогом понятия внутреннего файла в языках Си/Си++ яв­ляется понятие потока. Поток — это байтовая последовательность, передаваемая в про­цессе ввода-вывода.

Поток должен быть связан с каким-либо внешним устройством или файлом на диске. В терминологии Си это звучит так; поток должен быть направлен на какое-то устройство или файл.

Основные отличия файлов в Си состоят в следующем: здесь отсутствует понятие типа файла и, следовательно, фиксирован­ной структуры записи файла. Любой файл рассматривается как байтовая последовательность:

Стрелочкой обозначен указатель файла, определяющий теку­щий байт файла. EOF является стандартной константой — призна­ком конца файла.

Существуют стандартные потоки и потоки, объявляемые в про­грамме. Последние обычно связываются с файлами на диске, со­здаваемыми программистом. Стандартные потоки назначаются и открываются системой автоматически. С началом работы любой программы открываются 5 стандартных потоков, из которых ос­новными являются следующие:

o stdin — поток стандартного ввода (обычно связан с клавиатурой);

o stdout — поток стандартного вывода (обычно связан с дисплеем);

o stderr — вывод сообщений об ошибках (связан с диспле­ем).

Кроме этого, открывается поток для стандартной печати и до­полнительный поток для последовательного порта.

Работая ранее с программами на Си, используя функции вво­да с клавиатуры и вывода на экран, мы уже неявно имели дело с первыми двумя потоками. А сообщения об ошибках, которые система выводила на экран, относились к третьему стандартному потоку. Поток для работы с дисковым файлом должен быть от­крыт в программе.

Работа с файлами на диске. Работа с дисковым файлом начи­нается с объявления указателя на поток. Формат такого объяв­ления:

Слово file является стандартным именем структурного типа, объявленного в заголовочном файле stdio.h. В структуре file содержится информация, с помощью которой ведется работа с потоком, в частности: указатель на буфер, указатель (индикатор) текущей позиции в потоке и т.д.

Следующий шаг — открытие потока, которое производится с помощью стандартной функции fopen (). Эта функция возвраща­ет конкретное значение для указателя на поток и поэтому ее зна­чение присваивается объявленному ранее указателю. Соответству­ющий оператор имеет формат:

Имя_указателя=fореn (“имя_файла”, “режим_открытия”) ;

Параметры функции fopen () являются строками, которые мо­гут быть как константами, так и указателями на символьные мас­сивы. Например:

Существуют следующие режимы открытия потока и соответ­ствующие им параметры:

r открыть для чтения

w создать для записи

а открыть для добавления

r+ открыть для чтения и записи

w+ создать для чтения и записи

а+ открыть для добавления или

создать для чтения и записи

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

Понятие текстового файла: это последовательность символов, которая делится на строки специальными кодами — возврат ка­ретки (код 13) и перевод строки (код 10). Если файл открыт в текстовом режиме, то при чтении из такого файла комбинация символов «возврат каретки — перевод строки» преобразуется в один символ \n — переход к новой строке.

При записи в файл осуществляется обратное преобразование. При работе с двоичным файлом никаких преобразований симво­лов не происходит, т.е. информация переносится без всяких из­менений.

Указанные выше параметры режимов открывают текстовые файлы. Если требуется указать на двоичный файл, то к параметру добавляется буква b. Например: rb, или « b », или r +b. В некоторых компиляторах текстовый режим обмена обозначается буквой t, т.е. записывается a+t или rt.

Если при открытии потока по какой-либо причине возникла ошибка, то функция fopen() возвращает значение константы null. Эта константа также определена в файле stdio.h. Ошибка может возникнуть из-за отсутствия открываемого файла на диске, нехватки места в динамической памяти и т.п. Поэтому желатель­но контролировать правильность прохождения процедуры откры­тия файла. Рекомендуется следующий способ открытия:

if (fp=fopen(«test.dat», «r»)==NULL)

В случае ошибки программа завершит выполнение с закрыти­ем всех ранее открытых файлов.

Закрытие потока (файла) осуществляет функция fclose(), прототип которой имеет вид:

int fclose(FILE *fptr);

Здесь fptr обозначает формальное имя указателя на закрыва­емый поток. Функция возвращает ноль, если операция закрытия прошла успешно. Другая величина означает ошибку.

Запись и чтение символов. Запись символов в поток произво­дится функцией putc() с прототипом

int putc (int ch, FILE *fptr);

Если операция прошла успешно, то возвращается записанный символ. В случае ошибки возвращается константа EOF.

Считывание символа из потока, открытого для чтения, произ­водится функцией gets () с прототипом

int gets (FILE *fptr);

Функция возвращает значение считываемого из файла сим­вола. Если достигнут конец файла, то возвращается значение EOF. Заметим, что это происходит лишь в результате чтения кода EOF.

Исторически сложилось так, что gets() возвращает значение типа int. To же можно сказать и про аргумент ch в описании функции puts(). Используется же в обоих случаях только млад­ший байт. Поэтому обмен при обращении может происходить и с переменными типа char.

Пример 1. Составим программу записи в файл символьной пос­ледовательности, вводимой с клавиатуры. Пусть признаком завер­шения ввода будет символ *.

Источник

Ввод и вывод информации в программировании

Ввод и вывод данных: способы, функции и операторы. Последовательные контейнеры для последовательного и произвольного доступа к элементам с помощью индексов. Ассоциативные контейнеры для быстрого доступа с помощью ключей. Реализация обобщенного алгоритма.

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 26.05.2013
Размер файла 25,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

ФИНАНСОВЫЙ УНИВЕРСИТ ПРИ ПРАВИТЕЛЬСТВЕ РФ

КОНТРОЛЬНАЯ РАБОТА № 1


по дисциплине: «Информатика и программирование»

1. Ввод и вывод данных

Существует несколько способов консольного ввода и вывода.

Для работы с операторами cin и cout необходимо подключить библиотеку директивой #include (табл. 2.1).

Функции и операторы ввода/вывода информации

Функции ввода/вывода printf() и scanf()

Рассмотрим шесть наиболее распространенных функций ввода информации с клавиатуры и ее вывода на экран (консольный ввод-вывод): getchar, putchar (для ввода-вывода символа); gets, puts (для ввода-вывода строки); scanf, printf (для форматированного ввода-вывода ); и функцию flush очистки буфера stdin.

данные оператор контейнер алгоритм

/* Ввод-вывод с использованием функций getchar, putchar, gets, puts */

char nf[40]; int ch; clrscr();

put («Введите Ваше имя и фамилию»);

puts(«Вас зовут»); puts(nf);

puts(«Введите любой символ»); ch=getchar();

puts(«Вы ввели символ»); putchar(ch);

getch(); /*Организации задержки смены экрана*/

Функция printf предназначена для вывода форматированной последовательности данных. Может иметь один или несколько параметров, первым из которых является строка, называемая форматной строкой. За форматной строкой следует список вывода, который может содержать переменные, константы, выражения разных типов. Форматная строка задает способ преобразования и представления на печати элементов списка вывода, а также определяет, сколько элементов содержит список вывода и какого они типа.

Функция scanf предназначена для вывода форматированной последовательности данных

Формат функции ввода:

Основным отличием применения функции scanf() от функции printf() является знак & перед именем переменной, в которую записываются результаты ввода.

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

Функция scanf() возвращает число успешно считанных элементов. Если операции считывания не происходило, что бывает в том случае, когда вместо ожидаемого цифрового значения вводится какая-либо буква, то возвращаемое значение равно 0.

2. Определение последовательного контейнера

STL предоставляет два вида контейнеров:

o последовательные и

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

Ассоциативные контейнеры получают доступ к своим элементам по ключу.

Все контейнерные классы библиотеки STL определены в пространстве имен std.

Последовательные контейнеры


Это означает, что для элементов контейнера определены понятия первый, последний, предыдущий и следующий. К этому виду контейнеров принадлежат


o векторы,


o списки,


o Деки,


o строки типа string.


Векторы

Библиотека STL предоставляет контейнерный класс vector, определенный в заголовочном файле и доступный в пространстве имен std.

Класс vector ведет себя подобно массиву, однако предоставляет больше возможностей по управлению ним. В частности, вектор можно наращивать по мере необходимости, и он обеспечивает контроль значений индексов. Определение класса vector выглядит следующим образом:


По умолчанию память для элементов вектора распределяется и освобождается глобальными операторами new() и delete (). Таким образом, для создания нового элемента вектора вызывается конструктор класса Т. Для встроенных типов данных векторы можно определить следующим образом:

//Вектор целых чисел

//Вектор чисел типа

double vector vDbls;

Обычно пользователь знает, сколько элементов будет содержаться в векторе. В этом случае он может зарезервировать память в векторе для нужного числа элементов, указав его после имени объекта в круглых скобках, например:

Количество элементов в векторе можно узнать с помощью функции-члена size ():

size_type size() const;

Функция resize изменяет величину вектора. Она имеет следующий прототип:

void resize(size_type sz);

Если новая величина вектора sz больше текущей, то в конец вектора добавляется нужное число элементов класса Т. Если же новая величина вектора меньше текущей, вектор усекается с конца.

void pop_back(); //удаляет последний элемент вектора.

Обращаться к элементам вектора можно по индексам. Значения индекса начинаются с нуля. Например, присвоить значение четвертому элементу объявленного выше вектора можно следующим образом:


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


Добавить элемент в конец вектора можно с помощью функции-члена push_back(), однако она требует, чтобы в классе хранимых в контейнере объектов был определен конструктор копирования (эта функция добавляет в контейнер копию элемента). Она имеет следующий прототип:

void push_back(const Т& х); //Добавить элемент в конец вектора

Проверить, не является ли контейнер пустым, можно с помощью функции-члена empty ():

bool empty() const; //является ли контейнер пустым

Она принимает значение true, если контейнер пуст.

Функция clear (), имеющая следующий прототип:

void clear(); //удаляет все элементы из вектора.

Функция at () работает подобно оператору индексирования ( [ ] ), но является более безопасной, поскольку проверяет, попадает ли переданный ей индекс в диапазон допустимых значений. Если индекс вне диапазона, она генерирует исключение out_of _range.

Функция insert () вставляет один или несколько элементов, начиная с указанной позиции в векторе. Функция pop_back () удаляет из вектора последний элемент. Кроме того, для класса vector определены обычные операции сравнения.

Рассмотри теперь функции-члены шаблонного класса vector.

size_type capacity() const; возвращает величину распределенной для вектора памяти в виде числа элементов, которые могут быть сохранены в векторе.

void reserve(size_type n); добавляет емкость вектору в предположении, что к вектору будут добавляться новые элементы.

После вызова этой функции последующие операции добавления элементов не будут вызывать перераспределения памяти, пока величина вектора не превзойдет n. Перераспределение памяти не появляется, если n не превосходит значения capacity(). Если происходит перераспределение памяти, то все итераторы и ссылки, указывающие на элементы вектора, становятся неверными.

reference back(); возвращает ссылку на последний элемент

reference front(); возвращает ссылку на первый элемент вектора.

функция reference at(size_type n); возвращает ссылку на элемент со значением индекса n.

Функция

iterator insert (iterator position, const T& x);

вставляет элемент x перед элементом, позиция которого задана параметром position. Возвращаемое значение указывает на вставленный элемент.

Кроме обычных итераторов, в контейнере определены обратные (или реверсивные) итераторы, которые имеют тип reverse_iterator. Такие итераторы используются для прохода последовательного контейнера в обратном направлении, то есть от последнего элемента к первому.


reverse_iterator rbegin(); возвращает обратный итератор произвольного доступа, который указывает на область памяти за последним элементом.

reverse_iterator rend(); возвращает обратный итератор произвольного доступа, который указывает на первый элемент.

Библиотека STL содержит контейнерный класс list, предоставляющий в распоряжение двусвязный (двунаправленный) список. Он определен в заголовочном файле в пространстве имен std.


Этот класс имеет такие же функции, как вектор и ряд дополнительных функций.

Если с векторами итераторы используются редко, то при работе со списком они являются основным средством. Для создания списков предназначены конструкторы, которые имеют несколько форм. Конструктор

explicit list(const Allocator& alloc = Allocator() )

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

explicit list(size_type n);

создает список длины n, содержащий копии значения по умолчанию объектов типа Т. Тип Т должен иметь конструктор по умолчанию. Список использует для распределения памяти объект alloc.


Конструктор list(size_type n, const T& value, const Allocator & alloc = Allocator()); создает список длины n, содержащий копии значения value объектов типа Т. Тип Т должен иметь конструктор по умолчанию. Список использует для распределения памяти объект alloc. В классе list определены дополнительные функции. Функции void push_front(const T& x); и void pop_front(); аналогичны функциям push_back() и pop_back(), однако осуществляют добавление и удаление элементов в начале списка. Функция void remove(const Т& value); удаляет элемент из списка.

Вызвав функцию sort (), можно отсортировать список: void sort();

Источник

Понравилась статья? Поделиться с друзьями:

Не пропустите наши новые статьи:

  • что такое стандартный vga графический адаптер для windows 7
  • Что такое стандартные программы перечислите их
  • Что такое стандартная программа
  • Что такое стандарт языка программирования
  • что такое стандарт в программировании

  • Операционные системы и программное обеспечение
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest
    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии