Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
// Программа, использующая printf для форматирования вывода | |
#include <stdio.h> | |
int main() | |
{ | |
int anInt = 67; | |
Unsigned char aByte = 128; | |
char aChar = '@'; | |
Float aSingle = 355.0; | |
Double aDouble = 1.130e+002; | |
Printf("%3d + %2d = %3d\n", | |
aByte, anInt, aByte + anInt); | |
Printf("Вывод использует спецификации преобразования %%lf:\n"); | |
Printf(" %6.4f / %10.4lf = %7.5lf\n", | |
aSingle, aDouble, aSingle / aDouble); | |
Printf("Вывод использует спецификации преобразования %%le:\n"); | |
printf(" %6.4e / %6.4le = %7.5le\n", | |
aSingle, aDouble, aSingle / aDouble); | |
printf("Вывод использует спецификации преобразования %%lg:\n"); | |
printf(" %6.4g / %6.4lg = %7.5lg\n", | |
aSingle, aDouble, aSingle / aDouble); | |
printf("Символьная переменная aChar: %c\n", aChar); | |
printf("ASCII-код %c: %d\n", aChar, aChar); | |
return 0; | |
} |
Пример вывода программы из листинга 3:
128 + 67 = 195
Вывод использует спецификации преобразования %lf:
355.0000 / 113.0000 = 3.14159
Вывод использует спецификации преобразования %le:
3.5500e+02 / 1.1300e+02 = 3.14159e+00
Вывод использует спецификации преобразования %lg:
355 / 113 = 3.1416
Символьная переменная aChar: @
ASCII-код @: 64
В программе из листинга 3 объявляется целый набор переменных различных типов. Оператор вывода в строках 13 и 14 выводит целые, используя спецификацию формата %d. В таблице 4 приведены результаты действия спецификаций преобразования из строки 13. Обратите внимание на то, что первая переменная была преобразована из типа unsigned char в тип integer.
Таблица 4. Результат действия спецификаций форматирования в функции printf из строки 13
Спецификация формата | Переменная | Тип данных | Тип после преобразования |
%3d | aByte | unsigned char | Int |
%2d | anInt | int | Int |
%3d | aByte + anInt | int | Int |
Оператор вывода в строке 17 выводит переменные aSingle, aDouble и выражение aSingle / aDouble, используя спецификации преобразования %6.4f, %6.41f и % 7.51f. Точность представления задается ими равной 4, 4 и 5 цифрам, а минимальная ширина поля 6, 6 и 7 цифрам соответственно. Две последних спецификации осуществляют преобразование величин двойной точности.
Оператор вывода в строке 21 подобен оператору из строки 17. Отличие состоит в том, что используется е-формат вместо f-формата. Соответственно три значения выводятся в экспоненциальном формате.
Оператор из строки 25 также похож на оператор из строки 17. Основное отличие состоит в том, что вместо f-формата используется g-формат. В результате первые два числа выводятся без дробной части, поскольку они являются целыми величинами.
Оператор вывода в строке 28 выводит содержимое переменной aChar по формату %с. Оператор вывода в строке 29 выводит ту же переменную aChar дважды, первый раз как символ, а второй раз как целое (или, если быть точным, выводится ASCII-код символа). Для этого используются спецификации преобразования %с и %d соответственно.
Массивы символов в C++
В C++ имеется специальный класс для работы со строками, которого, конечно, не было в языке С. В С строки вводились как массивы символов, ограниченные нуль-символом (ASCII-код которого равен нулю), поэтому большое количество программ, написанных на С, используют символьные массивы. Более того, и в C++, несмотря на то, что он имеет класс для работы со строками, находится применение массивам символов. Поэтому термин «строка» имеет два значения: строка в смысле C++ и строка как массив символов. Весь этот раздел будет посвящен тому, как нужно и не нужно использовать символьные массивы.
Символ '\0' также называют нуль-терминатором. Строки, оканчивающиеся нуль-терминатором, называют еще ASCIIZ-строками, где символ Z обозначает ноль — ASCII-код нуль-терминатора. Еще этот символ называют NUL-символом, поскольку этот термин является его именем в ASCII.
Все строки обязательно должны оканчиваться нуль-терминатором, и при объявлении размера массива необходимо это учитывать. Когда вы объявляете строковую переменную как массив символов, увеличьте размер массива на один символ для нуль-терминатора. Использование строк с конечным нулем также имеет то преимущество, что здесь отсутствуют ограничения, накладываемые реализацией C++. Кроме того, структура ASCIIZ-строк очень проста.
Дата публикования: 2014-11-28; Прочитано: 240 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!