Шаг 8 - Консоль [спецификаторы printf, функции getc, getchar]

Казалось бы, какая устаревшая вещь. Тем нне менее, я считаю, что уметь с ней работать необходимо, даже в наш виндусиный век ;). Например, приложениям сервера или чего-то в этом роде предпочтительней работать в консольном режиме, какие-то классы, например строковый, тестировать удобнее в консоли. Короче, приступлю к объяснению.

Консоль в C++Builder сильно напоминает юниксовую, тот же stdin, stdout и все в том же духе. При запуске программа как консоль выводит обыкновенное окно "Сеанс МС-ДОС", с интутитивным интерфейсом :). Чтобы создать консольное приложение, нужно выбрать команду File -> New, и в списке создаваемых объектов выбрать Console Wizard. После этого выйдет такое диалоговое окно:

gif/8_1.gif (3114 b)

Все флажки обозначают то, что написано. Можно выбрать язык исходных кодов, разрешить или запретить использование VCL. При снятом флажке VCL можно выбрать или снять флажок multi-threaded, то есть многопоточный. В моем примере я обойдусь одним потоком. Флажок Console Application дает возможность выбрать, исполняется прграмма как консольное окно или как Win32. Все различие в том, что будет прописана функция WinMain или просто Main.

Жмите OK и смотрите жиденький код в Редакторе. После Win32 Application как-то не впечатляет. Но тем не менее. В примере будет решена задача отображения в ответ на ввод символа его ASCII кода. При нажатии клавиши ESC, если не ошибаюсь, код #27, выход из программы. Обычный бесконечный цикл, стандарт для ДОС-программ. Текст должен быть такой:

#include <stdio.h>
#pragma hdrstop

#pragma argsused
int main(int argc, char* argv[])
{
	char c=getc(stdin);
	while(c!=27)
	{
		if (c!=10)
			printf("\r\n%i",c);
		c=getc(stdin);
	};
	getchar();
	return 0;
}

В первой строке подключается заголовочный файл, аналогичный <iostream.h>. Он отвечает за ввод-вывод. Одна из него - функция getc() возвращает символ из стандартного ввода stdin. Потом идет цикл. Коды 27 и 10 - это ESC и ENTER. Функция printf() форматирует строку, подставляя вместо спецификаторов преобразованные значения. Спецификаторы для printf, печатаемые после "%":

Я привожу спецификаторы так подробно, потому что они встретятся далее в строках типа AnsiString и прочих.

Последняя функция getchar() вводит один символ с клавиатуры, просто чтобы окно сразу не закрылось.

Напоследок. Помните, что на этой древности многие программисты писали хорошие и очень хорошие программы! ;)


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Аванесов Самвел - 1.11.2001