Ноя
29
2009

Подсчёт строк, символов табуляции и пробелов во входном потоке на C

Продолжаю почитывать книжку по Си и пробовать кое-какие примеры и упражнения. Вот решил некоторые из них публиковать. Может быть кому-нибудь пригодится. В программке, код которой представлен ниже, идёт подсчёт строк, табуляций и пробелов во входном потоке до тех пор, пока не встретится символ точки.

#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, которая означает конец файла. Но как ей вставить во входной поток я не понял (если кто подскажет в комментах – буду признателен).

tags: , ,
posted in C/C++ by yas375

Follow comments via the RSS Feed | Оставить комментарий | Trackback URL

5 Comments to "Подсчёт строк, символов табуляции и пробелов во входном потоке на C"

  1. Драйв wrote:

    Хорошая статья. Действительно было интересно почитать. Не часто такое и встречается та.Наверное стоит подписаться на ваше RSS

  2. IIIypuk wrote:

    Читаю Кернигана и Ритчи.
    Дошел до главы 1.5.2 Подсчет символов
    Записываю код верно, но происходит постоянно бесконечный цикл и результат не выводится.
    Так же код на этой странице тоже зацикливается.

    Кто знает в чем проблема??
    Компилятор MinGW32.

    man_x@mail.ru

  3. Виктор wrote:

    IIIypuk таже проблема, компилятор cygwin и GCC :(

  4. yas wrote:

    так в этой программе она в цикле подсчитывает кодичество вводимых символов до тех пор пока не встретит символ EOF. EOF – enf of file. Т.е. если бы вы читали файл, то это был бы символ, который указывает на конец символа. В случае ввода данных из консоли для ввода символа EOF необходимо нажать Ctrl+d. И будет вам счастье! =)

  5. fresh man wrote:

    так в этой программе она в цикле подсчитывает кодичество вводимых символов до тех пор пока не встретит символ EOF. EOF – enf of file. Т.е. если бы вы читали файл, то это был бы символ, который указывает на конец символа. В случае ввода данных из консоли для ввода символа EOF необходимо нажать Ctrl+d. И будет вам счастье! =)
    у меня VS и после нажатия Ctrl+d счастья не прибавилось.что делать?

Leave Your Comment