Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Стандартный ввод-вывод языка Си

Стандартный ввод-вывод организован в Си функциями файла 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. Управляющие символы

esc символы
Перевод строки Горизонтальное табулирование v Вертикальное табулирование Возврат каретки \ Обратная косая черта ’ Апостроф ” Кавычка !!

 

  Таблица 2. Форматы ввода и вывода функций printf и scanf
вывод аргумента list в символьном формате
%d вывод аргумента list в формате целого числа
%e, %E вывод аргумента list в формате с плавающей точкой с шестью знаками после запятой [+/-]m.nnnnnn[+/-]pp
%f вывод аргумента list в формате дробного числа в форме с фиксированной точкой и шестью знаками после запятой [+/-]mmm.nnnnnn
%g, %G вывод аргумента list в формате e или f, но незначащие нули не печатаюся
%o вывод аргумента list с преобразованием в восьмеричный формат без лидирующего нуля
%p вывод указателя в шестнадцатеричном формате
%s вывод строкового значения аргумента listволы выводятся до символа (конец строки)
%u вывод аргумента list с преобразованием в беззнаковый десятичный формат
%x, %X вывод аргумента list с преобразованием в беззнаковый шестнадцатеричный формат

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

Структура такого формата:

%-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 и связывается с монитором.

 

Обеспечивают стандартные потоки ввода и вывода.

Поток – это абстрактное понятие, определяющее процесс переноса данных от источника к приемнику.

Процесс извлечение данных из потока означает ввод данных с клавиатуры.

Процесс помещением или включением данных в поток означает вывод данных на экран дисплея.

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

В программе потоки ввода и вывода представлены объектами соответствующих классов.

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

Объект Класс Операция
cin istream Ввод (чтение) с клавиатуры
cout ostream Вывод на экран
cerr ostream Вывод сообщений об ошибках (не буферизирован)
clog ostream Вывод сообщений об ошибках (буферизирован)
     

 

Ввод данных 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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...