Как сохранить файл cpp

Обновлено: 04.07.2024

Я кодирую свой финал для курса «Курс видеоигр», и я хочу знать, как создать файл сохранения для моей игры, чтобы пользователь мог играть, а затем вернуться позже. Любая идея, как это делается, все, что я делал раньше, - это программы с одним запуском.

Существуют библиотеки, которые предлагают сериализующие функции. Некоторые из них упоминаются в других ответах.

Переменные, которые вам интересны, вероятно, будут связаны с состоянием игры. Например, вы, вероятно, захотите узнать этот тип информации

  1. Игрок играл на уровне 3
  2. Игрок находился в координатах мира X, Y
  3. У игрока есть три предмета в рюкзаке
    1. Оружие
    2. Броня
    3. Питание

    Тебе не важно, какие текстуры используются (если ваш игрок не может изменить внешний вид, это особый случай), потому что они обычно одинаковы. Вам нужно сосредоточиться на сохранении важных данных gamestate.

    Когда вы начинаете игру, вы начинаете как обычно для «новой» игры (это загружает текстуры, модели и т. д.), но в соответствующее время вы загружаете значения из вашего файла сохранения обратно в объект состояния игры, заменяя « default "новое состояние игры. Затем вы позволяете игроку возобновить игру.

    Я значительно упростил его здесь, но вы должны получить общую идею. Если у вас есть более конкретный вопрос, задайте здесь новый вопрос, и мы можем попытаться помочь вам в этом.

    Как правило, это характерно для вашей игры. Я уверен, что вы узнали о написании и чтении из файлов в своих классах до сих пор. Основная идея:

    1. При выходе из игры напишите значения, которые вы хотите сохранить в файл.
    2. При загрузке игры проверьте, существует ли файл сохранения, если это так, загрузите прочитанные значения в свою программу. Если файл не существует, продолжайте, как сейчас, и установите значения в значения для начала /по умолчанию.

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

    Например (в быстром псевдокоде):

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

    Затем я просто fwrite /fread данные в файл и из него, используя базовые значения File IO. ResourceCount - это количество структур Item, которые сохраняются после основной структуры SaveGameData в файле, поэтому я знаю, сколько из них следует читать после извлечения этих данных. Ключевым моментом здесь является то, что когда я хочу сохранить что-то новое, если только его список элементов или тому подобное, все, что мне когда-либо нужно делать, это добавить значение в структуру где-то. Если его список элементов, то мне придется добавить проход чтения, как я уже подразумевал для объектов Item, счетчик в главном заголовке, а затем записи.

    Это имеет недостаток в том, что разные версии файла сохранения несовместимы друг с другом с особой обработкой (даже если это только значения по умолчанию для каждой записи в основной структуре). Но в целом это упрощает процесс, просто добавляя новое значение данных и при необходимости добавляя к нему значение.

    Опять же, довольно много способов сделать это, и это может привести скорее к C, чем к C ++, но он выполнил свою работу!

    Сначала вам нужно решить, какие данные нужно сохранить. Например, это может быть местоположение персонажа, его счет и количество монет. Конечно, ваша игра, вероятно, будет намного сложнее, поэтому вам нужно будет сохранить дополнительные данные, такие как номер уровня и список врагов.

    Затем напишите код, чтобы сохранить его в файле (использование потока). Относительно простой формат, который вы можете использовать, выглядит следующим образом:

    Итак, файл будет выглядеть так:

    Это означало бы, что он был на позиции (14, 96) со счетом 4200 и 100 монет.

    Вам также необходимо написать код для загрузки этого файла (используйте ifstream).

    Сохранение врагов может быть выполнено путем включения их положения в файл. Мы можем использовать этот формат:

    Сначала считывается number_of_enemies , после чего каждая позиция считывается с помощью простого цикла.

    Одно дополнение /предложение добавили бы уровень шифрования в вашу сериализацию, чтобы пользователи не могли редактировать их значения до «9999999999999999999». Одной из оснований для этого было бы предотвращение целочисленных переполнений (например).

    Я думаю, что ваш лучший выбор - это ускорение: сериализация, потому что легко распространяться в вашей иерархии. Вам нужно только вызвать функцию сохранения /загрузки верхнего объекта, и все ваши классы легко создаются.

    Для полноты я хочу упомянуть библиотеку сериализации c ++, которую я лично использовал и еще не упоминался: зерновые .
    Он прост в использовании и имеет красивый, чистый синтаксис для сериализации. Он также предлагает несколько типов форматов, которые вы можете сохранить (XML, Json, Binary (включая переносимую версию с уважением endianess)). Он поддерживает наследование и имеет только заголовок,

    Кроме того, если безопасность является проблемой, вы можете захотеть зашифровать /дешифровать хранящиеся вами данные, особенно если вы используете удобные для чтения форматы, такие как JSON. Здесь полезны такие алгоритмы, как AES.

    Для файлов ввода /вывода вам нужно использовать fstream . Синтаксис прост. EX:

    Другие действия возможны в вашем файле: append , двоичный , trunc и т. д. Вы должны использовать тот же синтаксис, что и выше, вместо этого мы поместите std :: ios: :( flags), например:

    Работа файлового ввода/вывода в языке C++ почти аналогична работе обычных потоков ввода/вывода (но с небольшими нюансами).

    Классы файлового ввода/вывода

    Есть три основных класса файлового ввода/вывода в языке C++:

    ofstream (является дочерним классу ostream);

    fstream (является дочерним классу iostream ).

    С помощью этих классов можно выполнить однонаправленный файловый ввод, однонаправленный файловый вывод и двунаправленный файловый ввод/вывод. Для их использования нужно всего лишь подключить заголовочный файл fstream.

    В отличие от потоков cout, cin, cerr и clog, которые сразу же можно использовать, файловые потоки должны быть явно установлены программистом. То есть, чтобы открыть файл для чтения и/или записи, нужно создать объект соответствующего класса файлового ввода/вывода, указав имя файла в качестве параметра. Затем, с помощью оператора вставки ( << ) или оператора извлечения ( >> ), можно записывать данные в файл или считывать содержимое файла. После проделывания данных действий нужно закрыть файл — явно вызвать метод close() или просто позволить файловой переменной ввода/вывода выйти из области видимости (деструктор файлового класса ввода/вывода закроет этот файл автоматически вместо нас).

    Файловый вывод

    Для записи в файл используется класс ofstream . Например:

    // Класс ofstream используется для записи данных в файл. // Если мы не можем открыть этот файл для записи данных, cerr << "Uh oh, SomeText.txt could not be opened for writing!" << endl ; // Когда outf выйдет из области видимости, то деструктор класса ofstream автоматически закроет наш файл

    Обратите внимание, мы также можем использовать метод put() для записи одного символа в файл.

    Файловый ввод

    Теперь мы попытаемся прочитать содержимое файла, который создали в предыдущем примере. Обратите внимание, ifstream возвратит 0 , если мы достигли конца файла (это удобно для определения «длины» содержимого файла). Например:

    // ifstream используется для чтения содержимого файла. // Если мы не можем открыть этот файл для чтения его содержимого, cerr << "Uh oh, SomeText.txt could not be opened for reading!" << endl ; // то перемещаем эти данные в строку, которую затем выводим на экран // Когда inf выйдет из области видимости, то деструктор класса ifstream автоматически закроет наш файл

    Результат выполнения программы:

    Хм, это не совсем то, что мы хотели. Как мы уже узнали на предыдущих уроках, оператор извлечения работает с «отформатированными данными», т.е. он игнорирует все пробелы, символы табуляции и символ новой строки. Чтобы прочитать всё содержимое как есть, без его разбивки на части (как в примере, приведенном выше), нам нужно использовать метод getline():

    // ifstream используется для чтения содержимого файлов. // Мы попытаемся прочитать содержимое файла SomeText.txt // Если мы не можем открыть файл для чтения его содержимого, cerr << "Uh oh, SomeText.txt could not be opened for reading!" << endl ; // то перемещаем то, что можем прочитать, в строку, а затем выводим эту строку на экран // Когда inf выйдет из области видимости, то деструктор класса ifstream автоматически закроет наш файл

    Результат выполнения программы:

    Буферизованный вывод

    Вывод в языке C++ может быть буферизован. Это означает, что всё, что выводится в файловый поток, не может сразу же быть записанным на диск (в конкретный файл). Это сделано, в первую очередь, по соображениям производительности. Когда данные буфера записываются на диск, то это называется очисткой буфера. Одним из способов очистки буфера является закрытие файла. В таком случае всё содержимое буфера будет перемещено на диск, а затем файл будет закрыт.

    Буферизация вывода обычно не является проблемой, но при определенных обстоятельствах она может вызвать проблемы у неосторожных новичков. Например, когда в буфере хранятся данные, а программа преждевременно завершает свое выполнение (либо в результате сбоя, либо путем вызова функции exit()). В таких случаях деструкторы классов файлового ввода/вывода не выполняются, файлы никогда не закрываются, буферы не очищаются и наши данные теряются навсегда. Вот почему хорошей идеей является явное закрытие всех открытых файлов перед вызовом функции exit().

    Также буфер можно очистить вручную, используя метод ostream::flush() или отправив std::flush в выходной поток. Любой из этих способов может быть полезен для обеспечения немедленной записи содержимого буфера на диск в случае сбоя программы.

    Интересный нюанс: Поскольку std::endl; также очищает выходной поток, то его чрезмерное использование (приводящее к ненужным очисткам буфера) может повлиять на производительность программы (так как очистка буфера в некоторых случаях может быть затратной операцией). По этой причине программисты, которые заботятся о производительности своего кода, часто используют \n вместо std::endl для вставки символа новой строки в выходной поток, дабы избежать ненужной очистки буфера.

    Режимы открытия файлов

    Что произойдет, если мы попытаемся записать данные в уже существующий файл? Повторный запуск вышеприведенной программы (самая первая) показывает, что исходный файл полностью перезаписывается при повторном запуске программы. А что, если нам нужно добавить данные в конец файла? Оказывается, конструкторы файлового потока принимают необязательный второй параметр, который позволяет указать программисту способ открытия файла. В качестве этого параметра можно передавать следующие флаги (которые находятся в классе ios ):

    app — открывает файл в режиме добавления;

    ate — переходит в конец файла перед чтением/записью;

    binary — открывает файл в бинарном режиме (вместо текстового режима);

    in — открывает файл в режиме чтения (по умолчанию для ifstream );

    out — открывает файл в режиме записи (по умолчанию для ofstream );

    trunc — удаляет файл, если он уже существует.

    Можно указать сразу несколько флагов путем использования побитового ИЛИ (|).

    ifstream по умолчанию работает в режиме ios::in;

    ofstream по умолчанию работает в режиме ios::out;

    fstream по умолчанию работает в режиме ios::in ИЛИ ios::out, что означает, что вы можете выполнять как чтение содержимого файла, так и запись данных в файл.

    В данной статье я хочу рассказать о том, как происходит компиляция программ, написанных на языке C++, и описать каждый этап компиляции. Я не преследую цель рассказать обо всем подробно в деталях, а только дать общее видение. Также данная статья — это необходимое введение перед следующей статьей про статические и динамические библиотеки, так как процесс компиляции крайне важен для понимания перед дальнейшим повествованием о библиотеках.

    Все действия будут производиться на Ubuntu версии 16.04.
    Используя компилятор g++ версии:

    Состав компилятора g++

    Мы не будем вызывать данные компоненты напрямую, так как для того, чтобы работать с C++ кодом, требуются дополнительные библиотеки, позволив все необходимые подгрузки делать основному компоненту компилятора — g++.

    Зачем нужно компилировать исходные файлы?

    Исходный C++ файл — это всего лишь код, но его невозможно запустить как программу или использовать как библиотеку. Поэтому каждый исходный файл требуется скомпилировать в исполняемый файл, динамическую или статическую библиотеки (данные библиотеки будут рассмотрены в следующей статье).

    Этапы компиляции:

    Перед тем, как приступать, давайте создадим исходный .cpp файл, с которым и будем работать в дальнейшем.

    driver.cpp:

    1) Препроцессинг

    Самая первая стадия компиляции программы.

    Получим препроцессированный код в выходной файл driver.ii (прошедшие через стадию препроцессинга C++ файлы имеют расширение .ii), используя флаг -E, который сообщает компилятору, что компилировать (об этом далее) файл не нужно, а только провести его препроцессинг:

    Взглянув на тело функции main в новом сгенерированном файле, можно заметить, что макрос RETURN был заменен:

    В новом сгенерированном файле также можно увидеть огромное количество новых строк, это различные библиотеки и хэдер iostream.

    2) Компиляция

    На данном шаге g++ выполняет свою главную задачу — компилирует, то есть преобразует полученный на прошлом шаге код без директив в ассемблерный код. Это промежуточный шаг между высокоуровневым языком и машинным (бинарным) кодом.

    Ассемблерный код — это доступное для понимания человеком представление машинного кода.

    Используя флаг -S, который сообщает компилятору остановиться после стадии компиляции, получим ассемблерный код в выходном файле driver.s:

    Мы можем все также посмотреть и прочесть полученный результат. Но для того, чтобы машина поняла наш код, требуется преобразовать его в машинный код, который мы и получим на следующем шаге.

    3) Ассемблирование

    Так как x86 процессоры исполняют команды на бинарном коде, необходимо перевести ассемблерный код в машинный с помощью ассемблера.

    Ассемблер преобразовывает ассемблерный код в машинный код, сохраняя его в объектном файле.

    Объектный файл — это созданный ассемблером промежуточный файл, хранящий кусок машинного кода. Этот кусок машинного кода, который еще не был связан вместе с другими кусками машинного кода в конечную выполняемую программу, называется объектным кодом.

    Далее возможно сохранение данного объектного кода в статические библиотеки для того, чтобы не компилировать данный код снова.

    Получим машинный код с помощью ассемблера (as) в выходной объектный файл driver.o:

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

    4) Компоновка

    Компоновщик (линкер) связывает все объектные файлы и статические библиотеки в единый исполняемый файл, который мы и сможем запустить в дальнейшем. Для того, чтобы понять как происходит связка, следует рассказать о таблице символов.

    Таблица символов — это структура данных, создаваемая самим компилятором и хранящаяся в самих объектных файлах. Таблица символов хранит имена переменных, функций, классов, объектов и т.д., где каждому идентификатору (символу) соотносится его тип, область видимости. Также таблица символов хранит адреса ссылок на данные и процедуры в других объектных файлах.
    Именно с помощью таблицы символов и хранящихся в них ссылок линкер будет способен в дальнейшем построить связи между данными среди множества других объектных файлов и создать единый исполняемый файл из них.

    Получим исполняемый файл driver:

    5) Загрузка

    Последний этап, который предстоит пройти нашей программе — вызвать загрузчик для загрузки нашей программы в память. На данной стадии также возможна подгрузка динамических библиотек.

    Запустим нашу программу:

    Заключение

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

    Прежде чем мы сможем написать нашу первую программу, нам нужно научиться создавать новые программы в нашей интегрированной среде разработки (IDE). В этом уроке мы расскажем, как это сделать, а вы скомпилируете и запустите свою первую программу!

    Проекты

    Чтобы написать программу на C++ внутри IDE, мы обычно начинаем с создания нового проекта (мы покажем вам, как это сделать чуть позже). Проект – это контейнер, в котором хранятся все файлы исходного кода, изображения, файлы данных и т.д., которые необходимы для создания исполняемого файла (или библиотеки, веб-сайта и т.д.), который вы сможете запускать или использовать. Проект также сохраняет различные настройки IDE, компилятора и компоновщика, а также запоминает, где вы остановились, чтобы позже, при повторном открытии проекта состояние IDE можно было восстановить с того места, где вы остановились. Когда вы решите скомпилировать свою программу, все файлы .cpp в проекте будут скомпилированы и слинкованы.

    Каждый проект соответствует одной программе. Когда вы будете готовы создать вторую программу, вам нужно будет либо создать новый проект, либо перезаписать код в существующем проекте (если вы не хотите его оставлять). Файлы проекта обычно специфичны для конкретной IDE, поэтому проект, созданный в одной IDE, необходимо будет заново создать в другой IDE.

    Лучшая практика

    Создавайте новый проект для каждой новой программы, которую вы пишете.

    Консольные проекты

    Когда вы создаете новый проект, вас обычно спрашивают, проект какого типа вы хотите создать. Все проекты, которые мы создадим в этом руководстве, будут консольными. Консольный проект означает, что мы собираемся создавать программы, которые можно запускать из консоли Windows, Linux или Mac.

    Ниже показан скриншот консоли Windows:

    Рисунок 1 Консоль Windows

    Рисунок 1 – Консоль Windows

    По умолчанию консольные приложения не имеют графического пользовательского интерфейса (GUI), они выводят текст на консоль, считывают ввод с клавиатуры и компилируются в автономные исполняемые файлы. Они идеально подходят для изучения C++, поскольку сводят сложность к минимуму и обеспечивают работу в самых разных системах.

    Не беспокойтесь, если вы никогда раньше не пользовались консолью или не знаете, как получить к ней доступ. Мы будем компилировать и запускать наши программы через наши IDE (которые при необходимости будут вызывать консоль).

    Рабочие пространства / решения

    Когда вы создаете новый проект для своей программы, многие IDE автоматически добавляют ваш проект в «рабочее пространство» («workspace» или «solution») (термин зависит от IDE). Рабочее пространство – это контейнер, который может содержать один или несколько связанных проектов. Например, если вы пишете игру и хотите иметь отдельные исполняемые файлы для одиночной и многопользовательской игры, вам нужно будет создать два проекта. Обоим этим проектам не имело бы смысла быть полностью независимыми – в конце концов, они являются частью одной игры. Скорее всего, каждый из них будет настроен как отдельный проект в рамках одного рабочего пространства.

    Хотя вы можете добавить несколько проектов в одно рабочее пространство, мы обычно рекомендуем создавать новое рабочее пространство для каждой программы, особенно во время обучения. Это проще, и вероятность того, что что-то пойдет не так, меньше.

    Написание вашей первой программы

    Традиционно у программистов, пишущих на новом языке, первой программой является печально известная программа hello world, и мы не собираемся лишать вас этого опыта! Вы нас потом поблагодарите. Может быть.

    Создание проекта в Visual Studio 2019

    Когда вы запустите Visual Studio 2019, вы должны увидеть диалоговое окно, которое выглядит следующим образом:

    Рисунок 2 Диалоговое окно Начало работы Visual Studio 2019

    Рисунок 2 – Диалоговое окно «Начало работы» Visual Studio 2019

    Выберите Создание проекта (Create a new project).

    После этого вы увидите диалоговое окно, которое выглядит следующим образом:

    Рисунок 3 Visual Studio 2019: диалоговое окно создания нового проекта

    Рисунок 3 – Visual Studio 2019: диалоговое окно создания нового проекта

    Если вы уже открыли предыдущий проект, вы можете открыть это диалоговое окно через меню Файл (File) → Создать (New) → Проект (Project).

    Выберите Мастер классических приложений Windows (Windows Desktop Wizard) и нажмите Далее (Next). Если вы этого не видите, то вы, вероятно, при установке Visual Studio забыли выбрать установку Desktop development with C++. В этом случае вернитесь к уроку «0.6 – Установка интегрированной среды разработки (IDE)» и переустановите Visual Studio, как было показано (примечание: вместо полной переустановки вы можете запустить установщик Visual Studio и изменить существующую установку, чтобы добавить поддержку C++).

    Далее вы увидите диалоговое окно, которое выглядит следующим образом:

    Рисунок 4 Диалоговое окно настройки нового проекта Visual Studio 2019

    Рисунок 4 – Диалоговое окно настройки нового проекта Visual Studio 2019

    Замените существующее имя проекта на HelloWorld .

    Рекомендуется также установить флажок «Поместить решение и проект в одном каталоге» (Place solution and project in the same directory), поскольку это сокращает количество подкаталогов, создаваемых с каждым проектом.

    Нажмите Создать (Create), чтобы продолжить.

    Наконец, вы увидите последнее диалоговое окно:

    Рисунок 5 Диалоговое окно параметров проекта Visual Studio 2019

    Рисунок 5 – Диалоговое окно параметров проекта Visual Studio 2019

    Убедитесь, что тип приложения установлен как Консольное приложение (.exe) (Console Application (.exe)), и что параметр Предкомпилированный заголовок (Precompiled Header) не выбран. Затем нажмите ОК.

    Вы создали проект! Чтобы продолжить, перейдите в раздел Обозреватель решений Visual Studio ниже.

    Создание проекта в Visual Studio 2017 или в более ранней версии

    Чтобы создать новый проект в Visual Studio 2017 или более ранней версии, выберите меню Файл (File) → Создать (New) → Проект (Project). Появится диалоговое окно, которое выглядит примерно так:

    Рисунок 6 Диалоговое окно Новый проект Visual Studio 2017

    Рисунок 6 – Диалоговое окно «Новый проект Visual Studio 2017»

    Сначала убедитесь, что слева указан Visual C++. Если вы не видите Visual C++, возможно, вы забыли выбрать установку поддержку Desktop development with C++ при установке Visual Studio. В этом случае вернитесь к уроку «0.6 – Установка интегрированной среды разработки (IDE)» и переустановите Visual Studio, как было показано (примечание: вместо полной переустановки вы можете запустить установщик Visual Studio и изменить существующую установку, чтобы добавить поддержку C++).

    Если вы используете Visual Studio 2017 v15.3 или новее, под Visual C++ выберите Windows Desktop, а затем выберите Windows Desktop Wizard в главном окне.

    Если вы не видите вариант с Windows Desktop, возможно, вы используете старую версию Visual Studio. Отлично. Вместо этого выберите Win32, а затем Win32 Console Application в главном окне.

    Внизу в поле Name введите название своей программы (замените существующее имя на HelloWorld ). В поле Location вы можете при желании выбрать другое место для размещения вашего проекта. Пока подойдет и значение по умолчанию.

    Нажмите ОК. Если вы используете старую версию Visual Studio, запустится мастер приложений Win32. Нажмите Next.

    На этом этапе вы должны увидеть диалоговое окно мастера, которое выглядит примерно так (более старые версии Visual Studio используют другой стиль, но имеют большинство из тех же параметров):

    Рисунок 7 Мастер создания десктопного приложения Visual Studio 2017

    Рисунок 7 – Мастер создания десктопного приложения Visual Studio 2017

    Убедитесь, что вы сняли флажок Предкомпилированный заголовок (Precompiled Header).

    Затем нажмите ОК или Finish. Теперь ваш проект создан!

    Обозреватель решений Visual Studio

    В левой или правой части окна вы должны увидеть окно под названием Обозреватель решений. В этом окне Visual Studio создала для вас решение (решение "HelloWorld"). Внутри него, имя которого выделено жирным шрифтом, находится ваш новый проект ( HelloWorld ). Visual Studio создала для вас в этом проекте ряд файлов, в том числе HelloWorld.cpp (в элементе дерева Исходные файлы (Source Files)). Вы также можете увидеть некоторые другие файлы .cpp или .h, которые пока можете игнорировать.

    Рисунок 8 Начальные окна Visual Studio 2019

    Рисунок 8 – Начальные окна Visual Studio 2019

    В текстовом редакторе вы увидите, что Visual Studio уже открыла HelloWorld.cpp и создала для вас код. Выделите и удалите весь код и введите/скопируйте следующий код в вашу IDE:

    Чтобы скомпилировать программу, либо нажмите F7 (если это не сработает, попробуйте Ctrl + Shift + B ), либо перейдите в меню Сборка (Build) → Собрать решение (Build Solution). Если всё пойдет хорошо, вы должны увидеть следующее в окне вывода:

    Или, в зависимости от выбранного языка:

    Это означает, что ваша компиляция прошла успешно!

    Вы забыли отключить предварительно скомпилированные заголовки при создании проекта. Заново создайте свой проект (в соответствии с инструкциями выше) и обязательно отключите предварительно скомпилированные заголовки.

    Чтобы запустить скомпилированную программу, нажмите Ctrl + F5 или перейдите в меню Отладка (Debug) и выберите Запуск без отладки (Start Without Debugging). Вы увидите следующее:

    Рисунок 9 Запуск программы

    Рисунок 9 – Запуск программы

    Это результат выполнения вашей программы! Поздравляем, вы скомпилировали и запустили свою первую программу!

    Создание проекта в Code::Blocks

    Чтобы создать новый проект, перейдите в меню File (Файл) → New (Новый) → Project (Проект). Появится диалоговое окно, которое выглядит следующим образом:

    Рисунок 10 Code::Blocks. Диалоговое окно создания проекта

    Рисунок 10 – Code::Blocks. Диалоговое окно создания проекта

    Выберите Console application (консольное приложение) и нажмите кнопку Go (перейти/создать).

    Если вы видите диалоговое окно мастера консольного приложения, нажмите Next (далее), убедитесь, что выбран C++, и снова нажмите Next.

    Теперь вам будет предложено назвать ваш проект. Назовите проект HelloWorld . Вы можете сохранить его где угодно. В Windows мы рекомендуем сохранить его в подкаталоге диска C, например C:\CBProjects .

    Рисунок 11 Code::Blocks. Диалогове окно сохранения проекта

    Рисунок 11 – Code::Blocks. Диалогове окно сохранения проекта

    Вы можете увидеть другое диалоговое окно с вопросом, какие конфигурации вы хотите включить. Значения по умолчанию здесь подойдут, поэтому выберите Finish.

    Теперь ваш новый проект создан.

    В левой части экрана вы должны увидеть окно Management (управление) с выбранной вкладкой Projects (проекты). Внутри этого окна вы увидите папку Workspace с вашим проектом HelloWorld внутри:

    Рисунок 12 Code::Blocks. Workspace

    Рисунок 12 – Code::Blocks. Workspace

    Внутри проекта HelloWorld разверните папку Sources (исходники) и дважды щелкните на « main.cpp ». Вы увидите, что для вас уже написана программа hello world!

    Замените ее следующим кодом:

    Чтобы собрать проект, нажмите Ctrl + F9 или перейдите в меню Build (Сборка) → Build (Сборка). Если всё пойдет хорошо, вы должны увидеть следующее в окне журнала сборки:

    Это означает, что компиляция прошла успешно!

    Чтобы запустить скомпилированную программу, нажмите Ctrl + F10 или перейдите в меню Build (Сборка) → Run (Запуск). Вы увидите что-то похожее на следующий скриншот:

    Рисунок 13 Запуск программы

    Рисунок 13 – Запуск программы

    Это результат выполнения вашей программы!

    Для пользователей Linux

    Пользователям Linux до компиляции в Code::Blocks может потребоваться установить дополнительные пакеты. Дополнительные сведения смотрите в инструкциях по установке Code::Blocks в уроке «0.6 – Интегрированная среда разработки (IDE)».

    Если вы используете g++ из командной строки

    В этом случае создавать проект не нужно. Просто вставьте следующий код в текстовый файл с именем HelloWorld.cpp и сохраните файл:

    В командной строке введите:

    Это скомпилирует и слинкует HelloWorld.cpp . Чтобы запустить скомпилированную программу, введите:

    И вы увидите результат выполнения своей программы.

    Если вы используете другие IDE или веб-компилятор

    Вам нужно будет самостоятельно выяснить, как сделать следующее:

    1. создать консольный проект (только для IDE);
    2. добавить в проект файл .cpp (только для IDE, если он для вас не был создан автоматически);
    3. вставить в файл следующий код:
    4. скомпилировать проект;
    5. запустить проект.

    Если компиляция завершилась ошибкой

    Во-вторых, посмотрите вопросы и ответы в уроке «0.8 – Несколько распространенных проблем C++», поскольку ваша проблема может быть там освещена.

    В-третьих, прочтите комментарии ниже – кто-то мог столкнуться с той же проблемой.

    Если ваша программа запускается, но окно мигает и сразу закрывается

    Некоторые IDE автоматически не приостанавливают экран консоли после завершения выполнения программы. Ваша программа запускается, но окно вывода закрывается, прежде чем вы сможете просмотреть результаты.

    Если это так с вашей IDE, следующие два шага решат вашу проблему:

    Во-вторых, добавьте следующий код в конец функции main() (непосредственно перед оператором return ):

    Это приведет к тому, что ваша программа будет ждать, пока пользователь нажмет какую-нибудь клавишу, прежде чем продолжить, что даст вам время изучить вывод вашей программы, прежде чем IDE закроет окно консоли.

    Другие решения, такие как обычно предлагаемое system("pause") , могут работать только в определенных операционных системах, и их следует избегать.

    Ваш антивирус также может блокировать выполнение программы. В таком случае попробуйте временно отключить его и посмотреть, решится ли проблема.

    Для пользователей Visual Studio

    Visual Studio не будет в конце делать паузу в работе консольного приложения, если оно запускается с отладкой (меню Отладка (Debug) → Начать отладку (Start Debugging)). Если вы хотите, чтобы она сделала паузу, вы можете либо использовать приведенное выше решение с дополнительным кодом, либо запустить свою программу без отладки (меню Отладка (Debug) → Начать отладку (Start Without Debugging)).

    Заключение

    Поздравляем, вы прошли самую сложную часть этого руководства (установку IDE и компиляцию вашей первой программы)!

    Не волнуйтесь, если не понимаете, что делают все строки в программе HelloWorld . Мы рассмотрим и подробно объясним каждую строку в начале следующей главы.

    Читайте также: