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

1 ... 13 14 15 [ 16 ] 17 18 19 ... 200


Листинг 2.6

11.срр : Defines the entry point for the console application. #include stdafx.h

include <stdio.h> for getchar(),putchar() t

#include <conio.h> for getchO

#define eof -1 признак конца файла

#define yes 1 для придания значения переменной in

#define no О для придания значения переменной in

int tmain(int argc, TCHAR* argv[]) {

int c; для ввода символа

int пс; для подсчета количества введенных символов

int nl; счетчик строк

int nw; счетчик слов

int in; /*флажок слежения за тем, находится ли в данный

момент программа внутри слова или нет*/ nc=nl=nw=0; обнуление счетчиков in=no; до ввода находимся вне слова

printf( Enter your strings and press the key <Enter> >\n ); while((c=getchar()) !=eof) {

if(c != \n) если символ - не конец строки ПС++; /*какой бы символ ни ввели

(кроме Ctrl+z и\п)/ его надо учитывать в счетчике*/ else иначе... (если введенный символ - конец строки) п1++; /*3десь с==\п и поэтому сколько раз нажали <Enter>, столько будет и строк*/ if(c== II с==\п II c==\t) /*если символ хотя бы один из

in=no;*/

/♦сколько бы раз ни нажимали на клавиши пробел , конец строки , табуляция , всегда будем находиться вне слова*/

else if(in==no) /*сюда попадаем только тогда, когда нажали любую клавишу, кроме пробела, <Enter> и конца строки*/



in=yes; /*если до этого мы бьши вне слова (in=-no), то

сейчас попали на начало слова*/ nw++; и слово надо учесть в счетчике

else иначе если (in != по)

/*эта часть вьшолняется, когда мы, находясь внутри слова (in !=по), ввели любой символ, кроме пробела, знака табуляции и знака конца строки. В этом случае подсчет слов не ведется, а программа возвращается на ввод следующего символа*/

) закрывающая скобка оператора while()

printf ( Strings.....=%d\n ,nl);

printf ( Words......=%d\n ,nw) ;

printf( Characters..=%d\n ,nc) ;

getch(); /*Вводит символ, но без эхо-сопровождения (задерживает отображение результатов расчетов на экране)*/

) закрывающая скобка функции mainO

Весь ход работы программы ясен из подробного комментария. Стоит обратить внимание на некоторые нововведения:

□ nc=nl=nw=0;

Так можно писать, потому что операция присвоить (=) выполняется справа налево. Поэтому сначала выполнится nw=o, потом выражение nl=nw (уже равное нулю), затем выполнится nc=ni;

□ появился оператор else. Это необязательная часть оператора if.

Если условие в скобках if ложно и нет части else, то тело оператора if не выполняется, а начинает работать следующий за if оператор.

Если есть необязательная часть else и условие if ложно, то выполняется тело оператора else (тело else обладает такими же свойствами, как и тело if).

Если условие if истинно, то выполняется тело этого оператора, а оператор else пропускается;

□ появилась комбинация else if.

Она работает точно так же, как и оператор if: если в ее скобках условие выполняется, то выполняется ее тело, в противном случае тело пропускается;



□ появилась логическая операция (или) или операция дизъюнкции. Это бинарная операция, результат которой истинен, когда исгинен хотя бы один из операндов.

В противоположность ей существует бинарная логическая операция && (и) или операция конъюнкции. Ее результат истинен только тогда, когда оба операнда истинны. Если хотя бы один из них ложен, то ложен и результат;

□ у последнего оператора else тело состоит из одного (пустого) оператора. Этот оператор else можно было бы опустить (он поставлен для более ясного понимания картины).

Результат расчетов приведен на рис. 2.5.

~ C:\WINOOWS\system32\cmd.exe

nter vour strings and press tlie key <Enter> > w 123 w 4 5 cd df r

qw Iq sdf 34e и

t rings.....=3

ords......=12

haracters..=35 ILin продолжения нажиите любую клавишу . . .

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



1 ... 13 14 15 [ 16 ] 17 18 19 ... 200

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