Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
%d Десятичное целое число
%с Один символ
%s Строка символов
%е Число с плавающей точкой, экспоненциальная запись
%f Число с плавающей точкой, десятичная запись
%g Используется вместо записей %f или %е, если он короче
%u Десятичное целое число без знака
%o Восьмеричное целое число без знака
%х Шестнадцатеричное целое число без знака
7.3.1. Использование функции printf().
Приведем программу, иллюстрирующую обсуждаемые вопросы.
/* печать чепухи*/
#define PI 3.14159
main()
{
int number = 5;
float ouzo = 13.5;
int cost = 31000;
printf("%d женщин выпили %f стаканов ликера.\n", number, ouzo);
printf("Значение числа pi равно %f.\n", PI);
printf("Прощай! Твое искусство слишком дорого для меня. \n");
printf("%c%d\n", '$', cost);
}
Формат, указываемый при обращении к функции printf(), выглядит следующим образом:
рrintf(Управляющая строка, аргумент1, аргумент2,...,);
Аргумент1, Аргумент2 и т. д. — это печатаемые параметры, которые могут быть переменными, константами или даже выражениями, вычисляемыми вначале, перед выводом на печать.
Управляющая строка — строка символов, показывающая, как должны быть напечатаны параметры. Например, в операторе
printf("%d женщин выпили %f стаканов ликера\n", number, ouzo);
управляющей строкой служит фраза в кавычках (учитывая предыдущие замечания, это — строка символов), a number и ouzo — аргументы или в данном случае значения двух переменных.
7.3.2. Модификаторы спецификации преобразования, используемые в функции printf().
Мы можем несколько расширить основное определение спецификации преобразования, поместив модификаторы между знаком % и символом, определяющим тип преобразования. В приводимой ниже таблице дан список тех символов, которые вы имеете право туда поместить.
Модификатор | Значение |
— | Аргумент будет печататься с левой позиции поля заданной ширины (как объяснено ниже). Обычно печать аргумента оканчивается в самой правой позиции поля Пример: %—10d |
строка цифр | Задает минимальную ширину поля. Большее поле будет использоваться, если печатаемое число или строка не помещаются в исходном поле Пример: %4d |
строка цифр | Определяет точность: для типов данных с плавающей точкой — число печатаемых цифр справа от десятичной точки; для символьных строк — максимальное число печатаемых символов Пример: %4.2f (две десятичные цифры для поля шириной в четыре символа) |
l | Соответствующий элемент данных имеет тип long, а не int. Пример: %ld |
Примеры
Посмотрим, как эти модификаторы работают. Начнем с того, что продемонстрируем влияние модификатора ширины поля на печать целого числа. Рассмотрим следующую программу:
main()
{
printf ("/%d/\n", 336);
printf ("/%2d/\n", 336);
printf ("/%10d/\n", 336);
printf ("/%-10d/\n", 336);
}
Эта программа печатает одно и то же значение четыре раза, но использует при этом четыре различные спецификации преобразования. Мы вводим также символы /, чтобы вы могли видеть, где начинается и кончается каждое поле. Результат выполнения программы выглядит следующим образом:
Первая спецификация преобразования %d не содержит модификаторов. Вторая спецификация преобразования — %2d. Она указывает, что ширина поля должна равняться 2, но, поскольку число состоит из трех цифр, поле автоматически расширяется до необходимого размера. Следующая спецификация %10d показывает, что ширина поля равна 10. И действительно, между символами / имеется семь пробелов и три цифры, причем число сдвинуто к правому краю поля. Последняя спецификация %— 10d также указывает ширину поля, равную 10, а знак — приводит к сдвигу всего числа к левому краю, как показано в приведенном выше примере.
7.3.3. Использование функции printf() для преобразования данных.
Здесь мы снова займемся выводом на печать целых чисел. Поскольку мы уже осведомлены о полях, то не будем заботиться об использовании символа /, чтобы отмечать их начало и конец:
main()
{
printf(" %d\n", 336);
printf(" %o\n", 336);
printf(" %x\n", 336);
printf(" %d\n", -336);
printf(" %u\n", -336);
}
В нашей системе результат будет выглядеть следующим образом:
Как вы, по-видимому, и ожидали, при использовании спецификации %d будет получено число 336 точно так же, как в примере, обсуждавшемся чуть выше. Но давайте посмотрим, что произойдет, когда вы «попросите» программу напечатать это десятичное целое число в восьмеричном коде. Она напечатает число 520, являющееся восьмеричным эквивалентом 336 (5*64+2*8 + 0*1 = 336). Аналогично при печати этого числа в шестнадцатеричном коде мы получим 150.
Таким образом, мы можем использовать спецификации, применяемые для функции printf() с целью преобразования десятичных чисел в восьмеричные или шестнадцатеричные и наоборот. Или же если вы захотите напечатать данные в желаемом для вас виде, то необходимо указать спецификацию %d для получения десятичных чисел, %о — для восьмеричных, а %х— для шестнадцатеричных. При этом не имеет ни малейшего значения, в какой форме число первоначально появилось в программе.
7.3.4. Применение функции scanf().
Так же как для функции printf(), для функции scanf() указываются управляющая строка и следующий за ней список аргументов. Основное различие двух этих функций заключается в особенностях данного списка. Функция printf() использует имена переменных, константы и выражения, в то время как функция scanf() — только указатели на переменные. К счастью, при применении этой функции мы ничего не должны знать о таких указателях. Необходимо помнить только два правила:
1. Если вам нужно ввести некоторое значение и присвоить его переменной одного из основных типов, то перед именем переменной требуется писать символ &.
2. Если вы хотите ввести значение строковой переменной, использовать символ & не нужно.
Приведем правильную программу:
main()
{
int age;
float assets;
char pet [30];
printf(" Укажите ваш возраст, состояние и любимое животное.\n");
scanf(" %d %f", &age, &assets);
scanf(" %s", pet); /* & отсутствует при указании массива символов */
printf(" %d $%.0f %s\n", age, assets, pet);
}
Вот пример диалога:
Функция scanf() использует некоторые специальные знаки (пробелы, символы табуляции и «новая строка») для разбиения входного потока символов на отдельные поля.
Функция scanf() использует практически тот же набор символов спецификации преобразования, что и функция printf(). Основные отличия в случае функции scanf() следующие:
1. Отсутствует спецификация %g.
2. Спецификации %f и %е эквивалентны. Обе спецификации допускают наличие (или отсутствие) знака, строки цифр с десятичной точкой или без нее и поля показателя степени.
3. Для чтения целых чисел типа short применяется спецификация %h.
Наличие пробелов между спецификациями преобразования гарантирует, что даже в том случае, если все поле будет заполнено, символы, соответствующие данному числу, не перейдут в следующее поле. Это вызвано тем обстоятельством, что обычные символы, имеющиеся в управляющей строке, включая пробелы, всегда печатаются.
9. Функции и переключение ввода-вывода.
9.1. Ввод и вывод одного символа: функции getchar() и putchar().
9.2. Буферы.
9.3. Чтение данных.
Дата публикования: 2015-01-13; Прочитано: 247 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!