Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Ввод-вывод массивов




Инструкции printf и scanf. Схема ввода-вывода

Вывод символьной информации

Ввод. Будет рассмотрен в другом разделе.

Вывод. Также.излагаются не все возможности. Цель данного раздела – дать средства для формирования пояснительных надписей.

Символы управляющей строки, не входящие в спецификации, выводятся в порядке их следования. Для вывода символа " % " надо записывать " %% ".

Пример.

printf("Число успешных сеансов составляет %d%%\n",kol);

printf("Рост:%.1f[см] Вес:%.3f[кг]\n", height, weight);

На экране получим:

Число успешных сеансов составляет 72%

Рост:181.5[см] Вес:75.600[кг]

Иногда требуется вывести несколько пробелов подряд для того, чтобы выровнять столбцы таблицы и т.п. Для этого можно использовать спецификацию вида: %[W]c, которая описывает 1 символ. Выводимый символ слева дополняется пробелами до W.

Пример. printf("L=%d%5cM=%d\n", l, ' ', m);

На экране получим: L=15 M=12

Пример.

Вычислить и напечатать таблицу: y=exp(-x)cos(p*x) x->[0; 0.75] dx=0.05

Макет

X Y
x.xx -0.xxxxx

............................................

 

x.xx -0.xxxxx

 

1 часть. Шапка. Располагается до цикла расчета таблицы функции.

printf("+------+----------+\n");

printf("| X | Y |\n");

printf("+------+----------+\n");

2 часть. В теле цикла расчета.

printf("|%5.2f |%9.5f |\n", x, y);

3 часть. После завершения цикла.

printf("+------+----------+\n");

Функции printf и scanf обычно используются в виде отдельных инструкций, которые получаются добавлением к обращению к ним символа ";". Однако, как и большинство других функций, они могут использоваться в выражениях и, следовательно, должны возвращать некоторое значение. Функция printf возвращает число выводимых символов (байтов), а функция scanf -число введенных скалярных значений.

Элементы списка данных функции scanf – адреса переменных, значения которых задаются, поэтому необходимо использовать оператор & (нахождение адреса).

Примеры.

l=scanf("%d%f%d", &a, &x, &b);

n=printf("a=%d x=%.5g b=%d\n", a, x, b);

printf("l=%d n=%d\n", l, n);

На экране отобразится:

12 23.278e-3 45(Enter) Вводятся с клавиатуры

a=12 x=0.023278 b=45 Результаты

l=3 n=23 вывода

printf("Рост:"); scanf("%f", &height); printf("Вес:"); scanf("%f", &weight);

На экране отобразится:

Рост:181.5

Вес:75.6

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

 
 


Ввод.

 

 
 


Вывод.

При вводе это происходит при получении необходимого числа символов для формирования элемента данных, определяемого параметром спецификации W, либо по приходе специального символа – ограничителя, сигнализирующего об окончании ввода символов для текущего элемента данных. Для функции scanf такими ограничителями являются знаки разрядки. Полученная последовательность символов преобразуется во внутреннее представление элемента данных согласно спецификации управляющей строки и отправляется в область памяти соответствующего по списку данных объекта программы. Появление в последовательности символа, который не может быть преобразован в соответствии со спецификацией, также играет роль ограничителя, т.е. прекращает формирование очередного элемента. Следовательно, функция scanf получает на вход символьную строку, а в качестве результата возвращает внутреннее представление объекта из списка данных.

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


Пример.

scanf("%d%f%f%f", &a, &b, &c, &d);

printf("/%d/%e/%f/%e\n", a, b, c, d);

scanf("%d%f", &e, &f);

printf("/%ld/%e/\n", e, f);

На экране имеем:

1 -2.347e-5 -236.485 2e10 4612347(Enter) Это ввод!

/1/-2.347e-05/-236.485000/2.00000e+10/

-94.56e-5(Enter)

/4612347/-9.45600e-04/

При выводе результат появится на экране только при заполнении всего буфера вывода. Последнее содержимое незаполненного буфера вывода отображается при завершении программы. Это иногда приводит к неожиданным последствиям. Если во время работы программы произошла ошибка и в это время буфер был не заполнен, то на экране его содержимое не появится. Это надо иметь в виду при попытке обнаружить место происхождения ошибки в процессе отладки программы.

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

Напомним, что одна спецификация передает одно значение, поэтому для организации ввода-вывода массивов в программе следует организовать цикл(ы), в теле которого необходимо поместить функцию printf или scanf.




Поделиться с друзьями:


Дата добавления: 2014-12-27; Просмотров: 449; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.017 сек.