Стандартный ввод-вывод языка Си
Стандартный ввод-вывод организован в Си функциями файла stdio.h. Стандартный ввод – обеспечивает ввод данных в ячейки оперативной памяти (переменные) с помощью клавиатуры. Стандартный вывод – обеспечивает вывод данных из оперативной памяти (ячеек) на монитор. 1. Форматированный ввод и вывод 1.1. Форматированный вывод Предназначен для вывода значений различных типов языка Си на монитор в том формате (виде), который определил разработчик. Форматированный вывод обеспечивает функция printf. Заголовок функции int printf(template string, list); Функция имеет два параметра: template string и list. Вызов функции обеспечивает запись данных, указанных в списке list, в поток stdout по формату, указанному в параметре template string,. В случае успеха вернет число записанных байт, в случае ошибки – EOF. Вызов функции может быть выполнен из тех точек текста программы, где допустимо использование выражения. Формат вызова printf(template string, list); Описание параметров template string – это строка-шаблон, описывающая представление выводимых на монитор данных с указанием формата, в котором должны быть представлены значения выражений из параметра list. Формат определяется в том месте шаблона, где должно быть выведено значение. Шаблон может содержать: поясняющий текст, esc символы (управляющие выводом), форматы. list –определяет список выражений, значения которых должны быть представлены на мониторе в результате вывода в соответствующем формате. Форматы представлены в таблице 2. Под выражением понимается: константа, переменная, вызов функции, сложное выражение. Таблица 1. Управляющие символы
Форматирование может быть выполнено с учетом так же ширины поля, отводимого для размещения значения. Для этого формат модифицируется – в него вводятся два числа: одно задает минимальное количество позиций под число, а второе – количество позиций в дробной части числа. Если выделенных позиций под число будет недостаточно, то количество позиций будет расширено автоматически. Структура такого формата: %-NX или %NX – для целого числа %-N.PХ или %-N.PХ – для целого числа Где: N – ширина поля(количество позиций) Х – формат согласно таблицы 2 Р – количество позиций под дробную часть числа - при выводе значение может быть прижато к левой границе выделенного поля. Примечание. Перед форматами может быть использован префикс l или h, т.е. можно установить формат %lf или %hu. Префикс h с типами о, d, x,X указывает на о, что значение должно быть представлено при выводе в формате short int, а с типом u это short unsigned int. Префикс l с типами о, d, x,X указывает на о, что значение должно быть представлено при выводе в формате long int, а с типом u это long unsigned int, а с типами e, E, f, g, G это аргумент типа double, а не float.
Пример формирования форматов с учетом рассмотренной структуры: printf(“В стандартном формате a=%f, в модифицированном формате a=%10.3f, с выравниванием по левому краю выделенного поля a=%-10.3f”, a,a,a); Результат
Пример вывода значений переменных int x=123; float y=123.123; char ch=’A’; printf(˝Вывод целого числа %d вещественного %7.2f символа %c˝, x, y, ch); Пример вывода значений выражений Известны корни приведенного квадратного уравнения x2+bx+c=0. X1- первый корень; Х2- второй корень. Вывести значение коэффициентов а и c. printf(˝Значение коэффициента а= %lf Значение коэффициента c= %lf˝, X1+X2, X1*X2);
Форматированный ввод Обеспечивает ввод данных числового, символьного, строкового типа функцией scanf. int scanf(formats string, list address varibles); чтение данных из потока stdin по формату. Описание параметров функции formats string (строка форматов) – определение списка форматовиз таблицы 2. Формат предназначен для преобразования вводимого с клавиатуры значения в формат хранения (формат переменной). В строке форматов перечисляются форматы через пробел, либо через запятую. Пример оформления строки форматов scanf(˝%d %f %d˝, …….); scanf(˝%d,%f,%d˝, …….); list address variables (список адресов переменных) – указывается список адресов переменных, в которые должны быть введены читаемые с клавиатуры значения. Переменные в списке отделяются запятыми. Переменные перечисляются в соответствии со списком форматов, т.е. первый формат соответствует первой переменной, второй формат второй переменной и т.д.. Пример оформления списка адресов переменных int a, b; float c; scanf(˝%d %f %d˝, &a, &c, &b); При выполнении оператора scanf важно правильно организовать процесс ввода данных с клавиатуры – входной поток. Если в списке форматов форматы разделены пробелом, то во входном потоке данные должны быть отделены либо пробелом, либо нажата клавиша Enter. Если в списке форматов форматы разделены запятой, то во входном потоке данные должны быть отделены запятой. Пример подготовки входного потока для выполнения ввода оператором scanf(˝%d %f %d˝, &a, &c, &b); числа разделяются пробелами.
123 12.234 124и нажимаем Enter. При выполнении этого ввода в переменную а запишется число 123, в переменную с число 12.234, а в b число 124. Примечание. При вводе текста, в котором есть пробелы, в строковую переменную в переменную запишется только часть текста: от начала и до пробела. Пример ввода текста, содержащего пробелы char s[20]; //строковая переменная scanf(”%s”,&s); если входной поток содержит текст Процедурное программирование То в переменную s будет помещено одно слово Процедурное.
2. Неформатированный ввод и вывод 2.1. Ввод символа int getchar(void); - чтение символа из потока stdin. Читает символ и возвращает его в качестве результата. Пример использования: char ch; ch=getchar(); функция читает символ, который пользователь ввел с клавиатуры, а оператор присваивания записывает значение в переменную. 2.2. Вывод символа int putchar(int c); запись символа в поток stdout (версия макро). Возвращает записанный символ c.В случае ошибки вернет EOF char ch=’d’; putchar(ch); 2.3. Ввод текста char *gets(char *s); чтение всего текста из потока stdin, включая символ перевод строки, заменяет символ перевод строки нулевым байтом ( ). Все символы, включая, пишутся в строку s и возвращается указатель на нее. Пример использования. Записать в переменную текст, введенный с клавиатуры, например такой: этот текст пишется в переменную s и записывает вместо . char s[100]; s=gets(); или gets(s); 2.4. Вывод текста int puts(const char *s); запись строки s в поток stdout. Добавляет символ перевода строки. В случае успеха вернет неотрицательное число, на ошибку вернет EOF. char st[100]=”fffffffffffffffffff”;puts(st);
Стандартный ввод вывод языка С++ Потоковый ввод/вывод в С++. Заголовочный файл iostream.h содержит описание стандартных потоков ввода вывода – объектов ввода istriam и вывода ostrim. Поток стандартного ввода определяется объектом cin и связывается с клавиатурой, поток стандартного вывода определяется объектом cout и связывается с монитором.
Обеспечивают стандартные потоки ввода и вывода. Поток – это абстрактное понятие, определяющее процесс переноса данных от источника к приемнику.
Процесс извлечение данных из потока означает ввод данных с клавиатуры. Процесс помещением или включением данных в поток означает вывод данных на экран дисплея. Обмен с потоком осуществляется через буфер – специальная область оперативной памяти. Передача данных при выводе осуществляется после того, как буфер будет заполнен, а при вводе – когда буфер станет пуст. В программе потоки ввода и вывода представлены объектами соответствующих классов. Примечание. Класс – это понятие объектно – ориентированного программирования. Изучение классов будет в курсе ООП. В этом курсе познакомимся только с объектами ввода и вывода и их методами.
Ввод данных c помощью операции извлечения >> из потока cin. Формат оператора ввода (чтения) с клавиатуры cin>>имя переменной [{>>имя переменной}]; Примечание. Элемент [{>>имя переменной}] означает, что одним оператором можно извлечь данные из потока в несколько переменных, т.е. для каждой переменной надо указывать >>имя переменной. При вводе введенные с клавиатуры данные автоматически преобразуются в формат переменной. Описание процесса ввода с клавиатуры: cin читает данные с клавиатуры и размещает в переменной. Когда в программе встречается оператор ввода, программа переходит в состояние ожидания ввода данных (если буфер пуст). Вы нажимаете на клавиатуре клавиши, например, вводите число 12345 и завершаете ввод нажатием клавиши Enter, после этого все введенные данные помещаются в буфер. Вы вводили число как последовательность символов!!! и они размещались в буфере ввода (поток cin). Далее данные из потока извлекаются и размещаются в переменных указанных в операторе после операции >>. Поток будет использоваться в операторах ввода, пока буфер ввода не будет пустым. Правила подготовки данных при вводе: 1) Целые числа подготавливаются в десятичной или шестнадцатеричной системе счисления (например, 0хFF). 2) Вещественные числа подготавливаются в форме с фиксированной точкой или плавающей (например, 1.23е-3). Примечание. Можно одним оператором ввести сразу несколько числовых значений, но при подготовке данных – чисел, их надо разделить пробелом или Enter. 3) Ввод текста в строковую переменную. Текст – это последовательность символов, из символов образуются слова, слова отделяются пробелами и другими знаками препинания. Ввод текста в строковую переменную выполняется до первого пробела. Вместо пробела в строку заноситься символ – конец строки (нуль-символ ).
Примеры. 1) ввод в переменную ch символа с клавиатуры #include "stdafx.h" #include "iostream" using namespace std; //обязательно
int _tmain(int argc, _TCHAR* argv[]) { char ch; cin>>ch; } 2) ввод сразу в несколько переменных int a, b, c; cin>>a>>b>>c;//поток содержит: 1 2 3 cout<<a<<b<<c;//на мониторе 123 3) ввод строки символов, состоящей из слов разделенных пробелом или char ch[100]; cin>>ch;// поток содержит текст: стандартные потоки cout<<ch;;//на мониторе: стандартные
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|