Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Комплексное пособие Си.pdf
Скачиваний:
62
Добавлен:
12.03.2015
Размер:
1.57 Mб
Скачать

Ввод/вывод с помощью функций printf() и scanf().

О том что это функции говорит наличие ( ) – скобок. Обе эти функции работают одинаково – каждая использует управляющую строку и список аргументов. Указанные функции не входят в описание языка Си, т.е. реализация в/в возлагается на создателей компилятора, что даст возможность более эффективно организовать в/в на конкретных машинах. Поэтому на разных машинах ив разных системах типа Турбо-Си, Borland-Си могут быть незначительные отличия.

Рассмотрим функцию

printf (<Упр-я строка>,<арг1>,<арг2>,…);

Управляющая строка заключается в двойные кавычки “ “, является строкой символов, которая печатается. В управляющей строке после специального знака % указывается формат, который зависит от типа переменной указанной в качестве аргумента. Каждому формату соответствует тип вводимой информации:

 

Таблица 1.

 

Тип вводимой информации

Формат

 

Десятичное целое число

%d

 

Один символ

%c

 

Строка символов

%s

 

Число с плавающей точкой, экспоненциальная

%e

 

запись

 

Число с плавающей точкой, десятичная запись

%f

 

Используется вместо записей %f или %e,если он

%g

 

короче

 

Десятичное целое без знака

%u

 

Восьмеричное целое без знака

%o

 

Шестнадцатиричное целое число без знака

%x

 

 

25

Основными являются первые пять. Пример

pi=3.14159;

e=2.718282;

printf(“число pi=%f ; число e=%f;\n”,pi,e); /*результат следующий */

число pi=3.14159; число e=2.71828;

или

printf(“число p=%f; число e=%f; число pi+e=%f! \n”,pi,e,pi+e);

/*результат */

число pi=3.14159; число e=2.71828 ; число pi+e=5.85987!

Т.о. аргумент1, аргумент2, и т.д. – это печатаемые параметры, кот-е могут быть переменными, константами, и выражениями, вычисляемыми перед выводом на печать.

Управляющая строка содержит информацию двух видов: 1)Символы,печатаемые текстуально(литеральные конст-ты) 2)Спецификации преобразования

n=20;

printf(“в группе %d человек \n”,n);

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

В том случае, если литеральные константы должны содержать символ %, то его в управляющей строке нужно указать дважды %%.

stud=10;

printf(“только %d%% студентов учатся на %c\n”,stud,5); /*печать след-я*/ только 10% студентов учатся на 5

26

Модификаторы спецификаций преобразования используемые в функции printf()

Между знаком % и сиволом, определяющим тип преобразования можно поместить модификаторы. К модификаторам относятся:

1)Знак минус - при этом аргумент будет печататься с левой позиции поля заданной ширины. Обычно печать аргумента оканчивается в самой правой позиции поля. Пример %-10в.

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

3)Строка цифр – определяет точность: для типов данных с плавающей точкой – число печатаемых цифр спрва от десятичной точки; для символьных строк – максимальное число печатаемых символов. Пример %4.2f – две десятичные цифры для поля шириной в четыре символа.

Рассмотрим влияние модификаторов преобразования на печать целого числа:

main()

{

printf(“/%d/\n”,625);

printf(“/%2d/\n”,625);

printf(“/%10d/\n”,625); printf(“/%-10d/\n”,625);

}

Эта программа напечатает 4 раза одно и то же значение. Литеральные константы / / используются, чтобы указать начало и конец поля. Печать будет следующей:

/625/

/625/

/625/

/625 /

В первом случае ширина поля = количеству цифр, т.е. по умолчанию Во втором случае %2d указывает, что ширина поля должна равняться 2, но указанное число не умещается в две позиции, поэтому ширина поля

автоматически увеличивается до необходимого размера. %10d – ширина поля=10.

27

%-10d - ширина поля=10, но число прижимается к левой границе поля.

Для чисел с плавающей точкой:

main()

{

printf(“/%f/\n”,1234.56);

printf(“/e/\n”,1234.56);

printf(“/4.2f/\n”,1234.56);

printf(“/%3.1f/\n”,1234.56);

printf(“/%10.3f/\n”,1234.56);

printf(“/%10.3e/\n”,1234.56);

}

Результат будет следующим:

/1234.560059/ /1.234560Е+03/ /1234.56/ /1234.6/

/1234.560/

/1.234Е+03/

Впервом случае имеются 2 величины, значения которых используются

по умолчанию: ширина поля и число цифр справа от десятичной точки. 2-я величина задает 6 цифр, а ширина берется такой, чтобы в нем могло поместится число.

Во втором случае по умолчанию спецификации е слева от десятичной точки печатается одна цифра, справа – шесть.

Рассмотрим варианты строк:

# define const “КГТУ – пуп земли!” /*здесь 15 символов, включая пробелы*/

main()

{

printf(“/%2s/\n”,const);

printf(“/%17.s/\n”,const);

printf(“%20.4s/\n”,const); printf(“%-20.4/\n”,const);

}

/КГТУ – пуп земли!/

/КГТУ – пуп земли!/

/

КГТУ/

/КГТУ

/

28