Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Как создать свой сайт и заработать?" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Программирование с нуля - это совсем просто! N 10. Консольная программа на Си++ и Бейсике
Информационный Канал Subscribe.Ru |
Программирование с нуля - это совсем просто!10) Делаем консольную программу. Теперь на Си++ в C++Builder и Visual StudioТак что прошу прощения за досадный сбой, но как такого избежать, дажеи не знаю. В прошлом занятии мы делали консольную программу на Паскале и Delphi. Теперь то же занятие для тех, кто выбрал Си++. Для этого нужна либо система Borland C++Builder 6 (или версии ниже, но не выше; я нашел кстати версию C++Builder 5 и на ней буду делать), либо Visual Studio 6 (или версии выше, но не ниже). Насчет Си++ и Borland C++Builder - вот строки из письма Андрея:
А заказчики и работодатели любят Си++, как мне кажется, потому что:
...Если Вы отдаёте предпочтение С++ и Паскалю, то логичнее было бы поставить Borland C++ Builder. Внешний вид такой же точно как у Delphi, а возможностей гораздо больше. У меня как-то стояли однономерный Дельфи и Билдер, так Дельфи постоянно "падала", а Билдер - как часы. Как гласит реклама самого "Дяди Бормана" "Простота и удобство Дельфи в сочетании с мощью С++". Я вот всё-таки не понимаю, почему, если С++, то обязательно Visual Studio? В Билдере же есть всё то же, что и в Студии + много чего ещё. Консольные приложения? - Console Application Vizard. Приложения с использованием MFC? - MFC Vizard. А что ещё надо? Плюс имеется и паскалевый компилятор, все компоненты для Дельфи нормально устанавливаются, можно в проект и формы дельфиньи вставлять вполне свободно, и в Си-шный текст выражения на Паскале вставлять, всё нормально откомпилируется. Так зачем 2 плохих компилятора иметь вместо одного
хорошего?
Кстати, сейчас модно ругать "Дядю Бормана" за то, что в Дельфи он Паскаль урезал, выкинув старьё. А вот в Билдере, наоборот, все мои любимые функции под DOS оставил. Поэтому, например, вот эта программа (см. исходный текст во вложении) в Студии работать не будет (проверял), а в Билдере - запросто!
Между прочим, на сайте Майкрософта чётко написано, что они не занимаются розничной продажей средств разработки и рекомендуют обращаться к региональным партнёрам. На сайте Борланда можно скачать / заказать 90-days trial version Билдера или Дельфи. Но, как мне кажется, качать (при модемном соединении!) около 75 Мб может только гибрид миллионера с мазохистом... Надеюсь, службы рассылок не сочтут это за рекламу.
Повторять сказанное в прошлом уроке не буду, просто выполним описанные в нем шаги, только не в Delphi, а сначала в C++Builder. Если у вас установлены и Delphi, и C++Builder, то при поочередном запуске они могут в начале загрузки спрашивать разную ерунду на английском :) Это потому что обе эти системы проверяют некоторые системные настройки (по-моему путь к отладчику), и просят их переустановить под себя. Просто Yes ответьте, и все. Итак, даем команду File > New > Other, выбираем значок Console Wizard. В Delphi сразу был Console Application, да? А тут визард, мастер. Он просит еще дополнительные шаги сделать перед созданием заготовки консольной программы. Вот его вопрос: http://russianenterprisesolutions.com/sbo/im/50.gif
Слева указывается язык, на котором будет создаваться программа. Си или Си++. Ну, Си++ помощнее и получше, кроме того, выучив Си++. человек автоматически выучивает и Си. А наоборот не получится, поэтому выбираем мы Си++, правильно? Справа снимем флажок с строчки "Use VCL" (это возможность использования единой библиотеки готовых компонентов C++Builder/Delphi, которая называется VCL; к музыкальному плееру например можно обращаться, если флажок включен; но пока нам это не надо). Затем отключим флажок со строки Multi Threaded (это когда в одном приложении можно создавать несколько одновременно работающих потоков; своего рода параллельншое программирование; на самом деле конечно на одном процессоре реальной одновременной работы несколькоих программ быть не может, но вот смоделировать их работу так, что будет полный эффект параллельности, можно; собственно, Windows так функционирует). Ну а Console Application конечно сохраним :) Кстати, а что будет, если и Console Application отключить? Все, жмем ОК и попадаем в редактор, где находится текст нашей программы. Заготовка.
//------ #pragma hdrstop //----- #pragma argsused int main(int argc, char* argv[]) { return 0; } //----- Теперь начинаем удалять лишние строки :) Вообще-то, добавлены они для наглядности, и вам самим в будущем понравится их добавлять, а не убирать, но пока все отвлекающее внимание ликвидируем. И вот что должно остаться:
int main(int argc, char* argv[]) { } Кроме того, первую строчку для наглядности и еще можно подкорректировать, вот так:
int main() { } Теперь эта программа больше напоминает написанную на Delphi, правда? В консольной программе на Си++ начало задается такой строкой: int main() Попозже мы разберем ее детально, а пока только отмечу, что слово main переводится как "главный". Главная программа то бишь. Фигурные скобочки { и } обозначают то же, что и слова begin и end в Delphi, то есть начало и конец. Таким образом, данная программа содержит три строчки, первая из которых отмечает, что делаем мы главное приложение (примерно как команда со словечком CONSOLE в Delphi, помните? хотя это не совсем одно и то же, что main(), но для простоты можно так пока принять). Вторая, "{", указывает на начало программы, а третья "}"- на конец. Вот и все. Запускается программа нажатием на клавишу F9 или кнопкой Run. Так же вы на краткий миг увидите, как мелькнуло черное окно и сразу закрылось. Теперь надо добавить команду ожидания нажатия клавиши на клавиатуре. Система общения с пользователем в Си++ организована немного по другому, нежели в Паскале. Там в самом языке уже имеются команды ввода/вывода информации, а в Си++ они вынесены во внешние библиотеки (их сотни, если не тысячи), которые разбиты на тематические наборы. Что означает внешние? Это означает, что в программе надо явно указать, какую конкретно библиотеку мы хотим использовать. В реальной работе обычно бывают нужны единицы, реже десятки определенных библиотек, названия которых вы быстро на практике запомните :) Команды общения с пользователем в консольном приложении находятся в библиотеке с названием conio (сокращение от console input/output; си-разработчики вообще очень любят сокращения :). Чтобы хранящиеся в ней команды стали доступны нашему приложению, ссылку на conio надо явно указать в начале программы. Делается это такой командой, немного странно выглядящей на первый взгляд: #include <conio.h>А вся программа будет выглядеть так:
#include <conio.h> int main() { } На самом деле эта команда подключения устроена просто. include переводится как "включить" (это команда препроцессора, и в Delphi тоже была схожая; до них мы еще доберемся), а затем просто указывается имя файла conio.h. Расширение .h обычно применяется в си-программах для хранения всевозможных описаний. Вот мы и добавили в нашу программу описание функций консольного ввода-вывода, чтобы компилятор знал, что такие существуют :) Запоминать это пока необязательно, главное, смысл поймите. Нужная нам команда ожидания нажатия клавиши (любой) в библиотеке conio записывается так: getch(); Сначала следует название нужной функции (сокращение :) от английского get - получить, и char - символ), затем круглые скобки (они в Си++ для функций обязательны, даже если в них ничего нету), а затем знакомый из Delphi символ ";", завершающий команду. Он нужен в конце каждого оператора. Важно! В отличие от Паскаля, в Си++ делаются различия между большими и маленькими буквами, то есть записи getch и GetCh будут различными! Вот что вышло в итоге:
#include <conio.h> int main() { getch(); }Пускаете программу, и теперь она, как послушная рабыня :) покорно ожидает, когда вы нажмете любую клавишу, чтобы закончиться. Смысл понятен? Смысл КАЖДОЙ строки этой программы?
Схожим образом создается консольная программа на Си++ и в Visual Studio. Кстати, по умолчанию кнопка Start в настройках рабочего окна Visual Studio может быть скрыта. Чтобы сделать ее видимой, надо переместить курсор мыши на область командных кнопок в верхней части, вызвать локальное меню и выбрать пункт Debug (Отладка). В результате к наборам командных кнопок добавится новая панель с кнопками управления ходом работы создаваемого приложения. Запускаем Visual Studio (я делаю в версии 2003 .NET, вы можете пробовать и в более ранних, версии 6, 5, ...). Даем команду главного меню File > New > Project. В окне выбираем раздел Visual C++ Projects, в нем подраздел Win32 (я его умышленно беру, он по идее должен быть совместим с Visual Studio 6), и справа - значок Win32 Console Wizard. Ну, визарды нам знакомы уже. Внизу надо еще каталог и имя проекта указать. Правда, единственное окошко мастера ни одного вопроса мне не задало :) Жмем Finish, и вот что возникает на экране:
// w32c.cpp : Defines the entry point for the console application. // #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { return 0; } Некоторые вещи уже нам знакомы, но есть и различия. Что можно удалить? Все, да не все. Команду include не удалить (можно удались конечно, но надо лезть в настройки, пока оставим) - в ней включается, как вы уже можете догадаться, некая библиотека stdafx. Это на самом деле самая важная библиотека при создании программ в Visual Studio, в ней много всяких возможностей имеется. Буквы std - сокращение от standard (стандартный), а что такое afx, я и не помню. Кто подскажет? Путем дальнейших проб и ошибок получается вот такой минимизированный код:
#include "stdafx.h" int _tmain() { } Почему _tmain() вместо общепринятого main() указано, не представляю. Вот такие они, разработчики БГ, загадочные... Я кстати попробовал и так:
#include "stdafx.h" int main() { } И тоже сработало. Ура! :) Теперь добавим команду включения нужной нам библиотеки conio и вызов функции getch():
#include "stdafx.h" #include <conio.h> int main() { getch(); } Только включение conio надо делать после stdafx, иначе оно может не подхватиться (а чтобы подхватывалось, надо повозиться с настройками проекта). Но отличие минимальное от варианта C++Builder, как видно. В основном в настроечных параметрах программы, какие там библиотеки специфические взять например. Запустите и проверьте ожидание нажатия. Теперь вы представляете примерно, какого плана могут быть проблемы, если пользоваться разными средами разработки. Легко преодолимого плана :) А вот насчет консольного приложения на Бейсике в Visual Studio 6 (не .NET), что-то мне подсказывает, что одной командой ввода там не обойтись. Увы... Вот как выглядит консольный вариант на Бейсике из Visual Studio .NET (проект создается командой главного меню File > New > Visual Basic Projects, значок Console Application):
Module Module1 Sub Main() End Sub End Module Здесь есть уже знакомое слово Main(), с него основная программа и начинается. А словами End Sub заканчивается. Только она еще сама включена в другой, более глобальный элемент исходного кода, модуль называется. Модуль начинается словами Module Module1 (Module1 - это название модуля, автоматически созданное, его можно изменить), а заканчивается словами End Module Внутри этого модуля и расположены наши исполняемые команды. В Visual Basic команда ожидания нажатия на Enter так выглядит: Console.ReadLine() Мда, еще говорят, что Бейсик проще :) Хотя вот точку с запятой в конце ставить не надо. Вот что получилось:
Module Module1 Sub Main() Console.ReadLine() End Sub End Module А вот что делать пользователям Visual Studio версии 6 и более ранних, даже и не знаю. Переходите на Visual C++ :) Может, подскажет кто какой простой выход для ввода/вывода в консольной программе на VB6 ? Время моего ответа на ваши письма несколько увеличивается :) но все равно пишите. Я отвечаю всем. (c) 2004 Сергей Бобровский bobrovsky@russianenterprisesolutions.com
Школа программирования с нуля
Все выпуски базового курса тут:
|
http://subscribe.ru/
http://subscribe.ru/feedback/ |
Подписан адрес: Код этой рассылки: comp.soft.prog.prognull |
Отписаться |
В избранное | ||