Программирование >>  Процедурные приложения 

1 ... 18 19 20 [ 21 ] 22 23 24 ... 150


Это так называемый цикле предусловием. Он начинается с ключевого слова whilе, за которым следует логическое выражение, возвращающее TRUE или FALSE. Фигурные скобки необходимы, когда цикл содержит более одной команды. В противном случае скобки необязательны. Строки, заключенные между фигурными скобками, формируют тело цикла.

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

Вывод данных на экран

В рассматриваемом примере мы повстречались с более сложным способом вывода информации на экран:

printf( %8.2f(футы) равняется\n ,feet); printf( %8.2f(метры) \n , meters); printf( %8.2f(сантиметры) \n ,centimeters); printf( \nВведите другое значение \n ); printf( (О- конец программ:): );

Принцип вывода заключается в использовании строк форматирования, которые применяются всегда, когда функция printf () выводит не только литералы (наборы символов, заключенные в двойные кавычки), но и значения переменных. В строках форматирования определяется тип данных выводимых переменных, а также способ их представления на экране.

Давайте рассмотрим элементы строки форматирования первой из функций printf ().

Элемент строки

1 Назначение форматирования

%8.2f

Задает интерпретацию переменной feet как числа типа float в следующем формате: 8 символов до запятой и 2 символа после

(футы) равняется

После вывода значения переменной feet будет сделан пробел и отображена строка (футы) равняется

Символ новой строки

Запятая отделяет строку форматирования от списка обозначенных в ней переменных

Расшифровка строк форматирования двух следующих функций printf () аналогична приведенной. Каждая функция выводит на экран отформатированное значение соответствующей переменной и строку символов, завершающуюся символом новой строки. В результате работы программы на экран будет выведено следующее:

Введите количество футов: 10 10.00 (футы) равняется

3.05(метры)

304.80 (сантиметры)

Введите другое значение (0 - конец программы): 0

При выводе данных можно в строках форматирования указывать так называемые управляющие последовательности наподобие символа новой строки в рассматриваемом примере. Все они перечислены в табл. 4.2. В случае записи ASCII-кода символа в восьмеричном/шестнадцатеричном представлении ведущие нули игнорируются компилятором, а сама последовательность завершается, когда встречается не используемый в данной системе счисления символ или четвертый/третий подряд восьмеричный/шестнадцатеричный символ, не считая ведущих нулей.

Таблица 4.2. Управляющие последовательности

Последовательность

Что обозначает

Предупреждающий звуковой сигнал

Стирание предыдущего символа



Перевод страницы

Новая строка

Возврат каретки

Горизонтальная табуляция

Вертикальная табуляция

Знак вопроса

Одинарная кавычка

Двойная кавычка

Обратная косая черта

\ddd

ASCII-код символа в восьмеричной системе

\xdd

ASCII-код символа в шестнадцатеричной системе

Получение данных от пользователя в языке C++

Ниже показана версия предыдущего примера, переписанная в соответствии с синтаксисом языка C++:

ui.cpp

Данная программа предлагает пользователю ввести длину в футах, после чего переводит полученное значение в метры и сантиметры.

#include <iostream.h> #include <iomanip.h> int main()

float feet, meters, centimeters; cout << Введите количество футов: ; cin >> feet; while(feet > 0)

centimeters = feet * 12 * 2.54;

meters = centimeters/100;

cout << setw(8) << setprecision(2)

<< setiosflags(ios: : fixed) << feet

<< ( футы) равняется \n ; cout << setw(8)

<< meters << ( метры) \n ; cout << setw(8)

<< centimeters << ( сантиметры) \n ;

cout << \nВведитедругоезначение\n ;

cout << (0- конец программы):

cin >> feet;

cout << >>> До свидания! <<< ; return(0);

Можно обнаружить пять основных различий между показанной программой на языке C++ и ее аналогом на С. Первые два состоят в применении объектов cin и cout вместо функций scanf () и printf (). В выражениях с ними также используются операторы << (для вывода) и >> (для ввода) классов ostream и istream, подключаемых в файле IOSTREAM. Н. Оба этих оператора являются перегруженными и поддерживают ввод/вывод данных всех базовых типов. Их можно также перегрузить для работы с пользовательскими типами данных.

Оставшиеся три различия связаны с особенностями форматированного вывода в C++. Чтобы добиться такого же формата вывода, какой был получен с помощью простой строки форматирования %8. 2f в программе на языке С, в C++ потребуются три дополнительных выражения. Файл IOMANIP.H, подключаемый в начале программы, содержит объявления трех функций, являющихся членами класса ios (базовый в иерархии классов ввода/вывода): setw(),setprecision () и setios-flags (). Функция setw () задает минимальную ширину (в символах) выводимого поля. Функция setprecision () задает число цифр после десятичной точки при выводе чисел с плавающей запятой. Функция setw () вынуждена повторяться три раза, поскольку определяет формат вывода только следующей за ней переменной, после чего все сделанные установки сбрасываются. В отличие от нее функция setiosflags () вызывается один



раз, устанавливая флаг fixed, который задает вывод чисел с плавающей запятой в фиксированном формате, т.е. без экспоненты. Те программисты, которые работают с языком C++, но хотят использовать привычную функцию printf (), могут подключить библиотеку

STDIO.H.

Файловый ввод-вывод

Часто требуется вводить данные не с клавиатуры, а из файла и не выводить полученный результат на экран, а записывать его в файл. Ниже показан простейший пример того, как организовать в программе работу с файлами:

* filel.c

* Эта программа на языке С демонстрирует использование файлов как

* ввода, так и для вывода данных. Программа читает значение переменной

* forder price из файла customer.dat, вычисляет значение переменной

* fbilling price и записывает его в файл billing.dat.

#include <stdio.h> #define MIN DISCOUNT .97 #define MAX DISCOUNT .95 int main ()

float forder price, fbilling price;

FILE *fin,*fout;

fin = fopen( customer.dat , r ); fout = fopen( billing.dat , w ); while (fscanf(fin, %f ,&forder price) != EOF) { fprintf(fout, Для заказа на сумму \t$%8.2f\n , forder price); if (forder price < 10000) fbilling price = forder price * MIN DISCOUNT; else fbilling price = forder price * MAX DISCODNT; fprintf(fout, цена со скидкой равна \t$%8.2f\n\n , fbilling price);

return(0);

Каждому файлу в программе соответствует свой указатель типа file. Структура file, описанная в библиотеке STDIO.H, содержит всевозможную информацию о файле, включая путь к нему, имя и атрибуты. В приводимом ниже выражении создаются два указателя файла:

FILE *fin, *fout;

В следующих двух строках файлы открываются для чтения и записи соответственно:

fin = fopen ( customer.dat , r ); fout = fopen( billing.dat , w );

Каждая функция fopen () возвращает инициализированный указатель файла. В процессе выполнения программы их значения не должны меняться вручную.

Второй параметр функции fopen (} определяет режим доступа к файлу (табл. 4.3). Файл может быть также открыт в следующих режимах: текстовом (включается путем добавления символа t к обозначению режима доступа) и двоичном (включается путем добавления символа Ь). В текстовом режиме компилятор языка С в процессе ввода данных заменяет пары символов возврата каретки и перевода строки одним символом новой строки. При выводе выполняется обратное преобразование. В двоичных файлах эти символы никак не обрабатываются.

Таблица 4.3. Режимы доступа к файлу в языке С

Режим доступа

Описание

Файл открывается для добавления данных; если файл не существует, он создается; все новые данные добавляются в конец файла

Аналогичен предыдущему режиму, но допускает считывание данных



1 ... 18 19 20 [ 21 ] 22 23 24 ... 150

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика