Следващата програма чете по един символ
от стандартния вход докато не срещне end-of-file. Тя брои прочетените редове и
символи. Изходът й има следния вид:
lineCount
characterCount
Описанието й има вида:
#include
<stream.h>
main() {
char ch;
int lineCnt=0,
charCnt=0;
while ( cin.get(ch) ) {
switch ( ch ) {
case ‘t’:
case ‘ ‘ : break;
case ‘n’:
++lineCnt;
break;
default : ++charCnt;
break;
}
}
cout << lineCnt << " " <<
"n";
return 0;
}
get() е функция, принадлежаща на вх/изх. поток,
която чете символи и ги записва като свой аргумент - в този случай, ch.
Последователността от два символа n представя символа tab.
Операторът
switch осигурява условен преход според стойността на селектора си. Ако
стойността му съвпада с някой от описаните след думата case стойности, се
изпълнява оператора, съответствуващ на тази стойност. Ако съответствие не може
да бъде намерено, се изпълняват операторите, записани след default. За всеки
прочетен символ за нов ред се увеличава стойността на lineCnt с 1. charCnt се
увеличава с 1 всеки път, когато е прочетен символ, който не е табулатор,
интервал или нов ред.
Операторът while, наричан оператор за цикъл,
осигурява многократно изпълнение на група от оператори докато някакво условие
има стойност истина. В този случай, операторът switch се изпълнява докато get()
чете символ от стандартния вход. (Операторите while и switch са описани в глава
6).
Упражнение 0-1. Въведете програмата във файл prog2.c и я компилирайте
в изпълним файл, наречен prog2.
Упражнение 0-2. Изпълнете програмата с
текста на предишното упражнение. Изпълнете я отново с текст, съдържащ само
празни интервали. Изпълнете я за текст, съдържащ само знака
end-of-file.
Упражнение 0-3. Преработете програмата така, че да брои
табулаторите (tabCnt) и интервалите (blankCnt). Нека изходът да изглежда
така.
Total Characters: xx
Lines: x
Chars: x
Tabs: x
Blanks:
x
1.4. Няколко думи за коментарите
Коментарите се пишат за
да подпомагат четенето на програмите. Те могат да поясняват алгоритъма на
функцията, да описват употребата на променливите или да поясняват други аспекти
по текста на програмата. Коментарите не увеличават размера на изпълнимата
програма. Те се отстраняват от компилатора преди генерацията на кода.
В
С++ са дефинирани два типа коментари. Двойката (“/* /”) описва коментарите в
езика С. Началото на коментара се определя чрез "/”. Всичко, което следва тези
символи ще бъде третирано от компилатора като коментар до срещането на символите
“*/”. Коментар може да бъде поставян там, където могат да се поставят
табулатори, интервали или символи за нов ред и той може да заема няколко реда от
програмата. Например,
/*
This is a first look at a C++ class
definition.
Classes are used both in data abstraction and
object-oriented
programming. An implementation
of the Screen class is presented in Chapter 5.
*/ class Screen {/* This is referred to as the class body */ public:
void
home(); /* move cursor to 0,0 */
void refresh(); /* redraw Screen
*/
private:
/* Classes support "information hiding". */
/*
Information hiding restricts a program’s */
/* access to the internal
representation of */
/* a class (its data). This is done through */
/* use
of the "private:" label */
char cursor; / current Screen position
*/
};
Многото коментари, разположени хаотично в програмния код,
могат да направят текста неясен. Например, обградената с коментари дефиниция на
cursor почти я скрива. Изобщо, за предпочитане е коментарът да се помества в
цялостен блок над текста, който пояснява.
#include
void read() { cout pact() { cout n"; }
void write() { cout n() {
read();
sort();
compact();
write();
return 0;
}
При мен С ми извежда грешка още в първия ред, демек при #include