Продолжаю почитывать книжку по Си и пробовать кое-какие примеры и упражнения. Вот решил некоторые из них публиковать. Может быть кому-нибудь пригодится. В программке, код которой представлен ниже, идёт подсчёт строк, табуляций и пробелов во входном потоке до тех пор, пока не встретится символ точки.
#include
main () {
long lines, tabs, spaces;
int c;
tabs = spaces = 0;
lines = 1;
while ((c = getchar()) != '.')
switch (c) {
case '\n':
++lines;
break;
case '\t':
++tabs;
break;
case ' ':
++spaces;
break;
}
printf("lines = %ld\n tabs = %ld\n spaces = %ld\n", lines, tabs, spaces);
}
Ну и на всякий случай для новичков как я более подробные инструкции по применению.
Создайте новую папку для этой программки. Там создайте файл, например, counter.c В него вставьте текст программы, который я привёл выше. Теперь создайте файлик makefile (в нём будет сожержаться информация для компилятора) со следующим содержимым:
CC = gcc all: counter counter: counter.o counter.o: counter.c .PHONY: clean clean: rm -f counter counter.o
Теперь в консоли, находясь в этой папке, запускайте:
make
./counter
Первой командой мы запускаем компиляцию программы, в результате которой мы получим исполняемый бинарный файл counter, который мы затем и запускаем.
После запуска программы наберирайте произвольный текст в консоли. Затем когда вы в строке вставите символ точки ‘.’, то программа остановится и выдаст результат о том, сколько до символа точки было пробелов, табуляций и строк. При желании символ точки можно поменять на какой-нибудь другой. В книжке в похожих примерах использовалась константа EOF, которая означает конец файла. Но как ей вставить во входной поток я не понял (если кто подскажет в комментах – буду признателен).
Хорошая статья. Действительно было интересно почитать. Не часто такое и встречается та.Наверное стоит подписаться на ваше RSS
Link | Март 19th, 2010 at 05:38
Читаю Кернигана и Ритчи.
Дошел до главы 1.5.2 Подсчет символов
Записываю код верно, но происходит постоянно бесконечный цикл и результат не выводится.
Так же код на этой странице тоже зацикливается.
Кто знает в чем проблема??
Компилятор MinGW32.
man_x@mail.ru
Link | Октябрь 28th, 2011 at 00:45