Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Листинг 3. Исходный текст программы OUT2.CPP в файле List7-3.CPP



  // Программа, использующая 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...