|
Программирование >> Элементы языков с и с++
Листинг 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
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |