Программирование >>  Элементы языков с и с++ 

1 ... 11 12 13 [ 14 ] 15 16 17 ... 200


считывается в переменной пс типа long по правилу: ввели один символ - значение пс увеличивается на единицу, ввели еще один - снова пс увеличивается на единицу и т. д. В начале каждого выполнения программы значение ПС обнуляется.

Далее происходит запрос на ввод символов (текст выводится на экран). Затем опять с помощью цикла while организуется ввод символов до тех пор, пока не будет нажата комбинация клавиш <Ctrl>+<z>. Заметим, что тело оператора while (как и в предыдущем примере) содержит только одно выражение, поэтому фигурные скобки, ограничивающие тело оператора, излишни. Поскольку тело оператора составляет функция getchar о, то когда оператор while начнет вычислять выражение, потребуется ввод символа с клавиатуры. После того как мы введем символ, значение getchar о станет равным коду введенного символа: эта функция всегда выдает код символа, который мы нажимаем на клавиатуре. Поэтому нет необходимости значение getchar () еще присваивать какой-либо переменной, тем более что сам введенный символ по нашему алгоритму не требуется - значение getchar о сразу сравнивается с признаком конца файла. Если этот признак еще не введен (мы не на-жани комбинацию клавиш <Ctrl>+<z?>), то условие выполнения оператора while не нарушается, и тело оператора while, состоящее всего из одного оператора ПС++, начинает выполняться опять.

Новый оператор пс++ равносилен выражению пс=пс+1 (т. е. к значению пс добавляется единица). Кстати, можно в данном случае писать и ++пс: пока операция ++ не участвует в выражении типа int х=пс++ или int х=++пс, это не имеет никакого значения. В последних же случаях положение символов ++ существенно: если они находятся до пс, то сначала операция выполняется, а потом уже результат присваивается переменной х. Если находятся после пс, то сначала содержимое пс присваивается переменной х, а потом уже пс изменяется на единицу. Этой операции родственна операция -, которая ведет себя так же, как и ++, но не прибавляет, а вычитает единицу.

C:\WINDOWS\system32\cmd.exe

аке input> sdfgl2 Z

laracteiss nunber is: 8

Рис. 2.2. Результат работы программы листинга 2.3



Подсчет символов в файле. Вариант 2

Изменим несколько предыдущую программу, применив новый оператор и новую операцию (см. по тексту). Программа будет выглядеть, как показано в листинге 2.4.

Листинг 2.4

Э.срр : Defines the entry point for the console application, ttinclude stdafx.h

ttinclude <stdio.h> for getchar(),putchar()

ttinclude <conio.h> for getch() ttdefine eof -1 признак конца файла

int main() {

double nc;

printf( Make input>\n ); for(nc=0; getchar0 !=eof; nc++)

printf( Characterss number is: %0.f\n ,nc); printf( Characterss number is: %f\n ,nc); getch(); вводит символ, но без эхо-сопровождения

Для подсчета символов в файле мы применили переменную нового типа double (это длинное float), т. к. таких символов, возможно, окажется больше, чем может поместиться в переменную, описанную в предыдущем примере. Размер занимаемой памяти для переменной типа double больше или равен, чем для типа float, но меньше или равен, чем для типа long doublel. Последний тип совпадает с типом double.

В функции printf О мы снова видим новый формат: %id. По этому формату выводятся числа типа long.

Результат работы программы приведен на рис. 2.2. Заметим, что в подсчете символов участвует и символ комбинации клавиш <Ctrl>+<z>.



В табл. 2.1 приведены значения размеров памяти для основных типов данных в Microsoft С++.

Таблица 2.1. Размеры памяти для основных типов данных

Размер памяти

bool

1 байт

char, unsigned char, signed char

1 байт

short, unsigned short

2 байта

int, unsigned int

4 байта

intn

8, 16, 32, 64, или 128 битов (зависит от значения п)

long, unsigned long

4 байта

float

4 байта

double

8 байтов

long doublel

8 байтов

long long

8 байтов

Накапливать по единице мы можем в любой числовой переменной, а не только в переменной типа int. Для обеспечения цикличности ввода символов в этой программе использован оператор цикла for, работу которого мы ранее рассматривали. В его заголовочной части имеются три выражения:

П инициализирующее выражение (пс=о) - в этом выражении задаются начальные значения переменных, которые будут участвовать в цикле (в нашем случае - переменная пс);

□ выражение, определяющее условие окончания цикла (getchar () !=eof) - в нашем случае цикл окончится, когда будет введен символ комбинации клавиш <Ctrl>+<z>;

□ выражение, определяющее изменение переменной, по которой, как говорят, идет цикл - в нашем случае пс++.

Поскольку все удалось разместить в заголовочной части, то в теле оператора for нет необходимости. Но формат оператора необходимо соблюсти. Поэто-



1 ... 11 12 13 [ 14 ] 15 16 17 ... 200

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