Фраза "Структурная переменная описывается с помощью переменной структурного типа" на мой Взгляд является тафтология. Из нее сложно понять суть утверждения. Хотелось бы полке понятного описания. |
Операторы
Изучение и использование функций printf( ) и scanf( )
Функции printf( ) и scanf( ) дают нам возможность взаимодействовать с программой. Мы называем их функциями ввода-вывода. Это не единственные функции, которыми мы можем воспользоваться для ввода и вывода данных с помощью программ на языке Си, но они наиболее универсальны. Эти функции входят в описание языка Си и они даны в библиотеке stdio.h. Обычно функции printf( ) и scanf( ) работают во многом одинаково - каждая использует управляющую строку и список аргументов. Сначала мы рассмотрим работу функции printf( ), затем scanf( ).
Формат | Тип выводимой информации |
---|---|
%d | десятичное целое число |
%c | один символ |
%s | строка символов |
%e | экспоненциальная запись |
%f | число с плавающей точкой, десятичная запись |
%g | используется вместо записи %f или %e |
%u | десятичное целое число без знака |
%o | восьмеричное целое число без знака |
%x | шестнадцатеричное целое число без знака |
Инструкции, передаваемые функции printf( ), когда мы хотим напечатать некоторую переменную, зависят от того, какого типа эта переменная. Например, при выводе на печать целого числа применяется формат %d, а при выводе символа - %c. Форматы перечислены в таблице.
Посмотрим теперь, как эти формы применяются:
/* печать */ #include <stdio.h> #define PI 3.14159 int main( ) { int number = 2003; printf("Интернет-университет информационных технологий был открыт в %d году \n", number); printf("Значение числа pi равно %f.\n", PI); }
Формат, указываемый при обращении к функции printf( ), выглядит следующим образом:
printf(Управляющая строка, аргумент1, аргумент2,_);
аргумент 1, аргумент 2 и т.д. - это печатаемые параметры, которые могут быть переменными, константами или даже выражениями, вычисляемыми перед выводом на печать.
Управляющая строка - строка символов, показывающая, как должны быть напечатаны параметры. Например, в операторе
printf("%d студентов получили оценку %f.\n", number, z);
управляющей строкой служит фраза в кавычках, а number и z - аргументы или в данном случае значения двух переменных.
Мы видим, что в управляющей строке содержится информация двух различных типов:
- Символы, печатаемые текстуально.
- Идентификаторы данных, называемые также спецификациями преобразования.
Каждому аргументу из списка, следующего за управляющей строкой, должна соответствовать одна спецификация преобразования. Если нужно напечатать какую-нибудь фразу, то нет необходимости использовать спецификацию преобразования ; если же требуется только вывести данные на печать, то можно обойтись и без использования комментария. Поэтому каждый из операторов, приведенных ниже, вполне приемлем:
printf("Эта книга не очень дорогая!\n"); printf("%c%d\n",'$',cost);
Если нужно напечатать сам символ %, то компилятор примет его за ошибочную спецификацию преобразования. Выходом из создавшейся ситуации служит довольно простое решение - писать два символа % подряд.
Например:
int i=2+3; printf("Только %d%% населения способно учиться самостоятельно! \n",i);
Результат работы программы будет выглядеть следующим образом:
Только 5% населения способно учиться самостоятельно!
Мы можем расширить основное определение спецификации преобразования, поместив модификаторы между знаком % и символом, определяющим тип преобразования. При использовании одновременно нескольких модификаторов они должны быть указаны в том порядке, в котором перечислены в таблице.
Модификаторы | Значение |
---|---|
- | Аргумент будет печататься с левой позиции поля заданной ширины. Обычно печать аргумента оканчивается в самой правой позиции поля. Пример: %-10 |
строка цифр | Задает минимальную ширину поля. Большее поле будет использоваться, если печатаемое число или строка не помещается в исходном поле Пример: %4d |
строка цифр | Определяет точность: для типов данных с плавающей точкой число печатаемых цифр справа от десятичной точки; для символьных строк - максимальное число печатаемых символов Пример: %4.2f (две десятичные цифры для поля шириной в четыре символа) |
l | Соответствующий элемент данных имеет тип long, а не int Пример: %ld |
Примеры:
int main( ) { printf("/%d/\n",135); printf("/%2d/\n",135); printf("/%10d/\n",135); printf("/%-10d/\n",135); }
Первая спецификация преобразования %d не содержит модификаторов. Это так называемый выбор по умолчанию, т. е. результат действия компилятора в случае, если вы не дали ему никаких дополнительных инструкций. Вторая спецификация преобразования - %2d. Она указывает, что ширина поля должна равняться 2, но, поскольку число состоит из трех цифр, поле автоматически расширяется до необходимого размера. Следующая спецификация %10d показывает, что ширина поля равна 10. Последняя спецификация %-10d также указывает ширину поля, равную 10, а знак - приводит к сдвигу всего числа к левому краю.