Четверг, 09 Мая 2024, 07:19

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Форум игроделов » Программирование » C/C++ » Вопрос-Ответ (C++) (Вопросы по С++ задаём здесь.)
Вопрос-Ответ (C++)
KornivalДата: Воскресенье, 04 Сентября 2011, 19:10 | Сообщение # 1
The Witcher
Сейчас нет на сайте
Чтобы не создавать отдельную тему на каждый глупый вопрос, предлагаю задавать их здесь.

Saitei: все вопросы по С задаём в теме Вопрос-Ответ (С). Благодарю за внимание!
WolflingДата: Суббота, 06 Июля 2013, 10:25 | Сообщение # 1001
был не раз
Сейчас нет на сайте
Доброго времени суток, господа.
Я пишу графический движок, использую урок http://pmg.org.ru/nehe/index.html. Выполнил первые два урока, отладил все ошибки (спасибо здешним форумчанам), НО! Столкнулся с проблемой, что форма не выводит ничего. Просмотрев прилагаемые примеры увидел, что там нет примеров для C++ Builder 2007, в котором я пишу. Может кто-нибудь подсказать, в чём может быть проблема?
Если нужны файлы проекта, то при заливке на тот сервис, которым я пользуюсь, архив определился как заражённый, так что файлы пока показать не могу.
RUNGOGET2THECHOPAHДата: Суббота, 06 Июля 2013, 10:32 | Сообщение # 1002
участник
Сейчас нет на сайте
Wolfling, на сайте автора уроков есть примеры для 2006 билдера (в конце каждого урока куча ссылок).
WolflingДата: Суббота, 06 Июля 2013, 13:25 | Сообщение # 1003
был не раз
Сейчас нет на сайте
Цитата (RUNGOGET2THECHOPAH)
на сайте автора уроков есть примеры для 2006 билдера (в конце каждого урока куча ссылок).

Я их видел, и примеры для шестого билдера скачивал, но так и не смог понять, почему у меня не происходит рендер на форме. Наверное, либо какие-то различия в компиляции или я вообще не тот тип проекта использую...
GameMixДата: Понедельник, 08 Июля 2013, 13:49 | Сообщение # 1004
старожил
Сейчас нет на сайте
Всем привет. Во время изучения работы с файлами возникли непонятки (Ссылка на статью). Я решил использовать вместо простых ios::in, ios::out - ios::nocreate, т.е. чтобы несуществующий файл просто не открывался (новый создавать не нужно). Но почему-то компилятор Dev-C++ выбивает ошибку:
Код
file.cpp `nocreate' is not a member of `std::ios'

Код программы целиком:
Код
#include <iostream.h>
#include <fstream.h>

int main()
{
ofstream F;

F.open("test.txt", ios::nocreate);
if (F) cout << "Opened!";
else cout << "Not opened";

system("Pause");
return 0;
}
Помогите, пожалуйста, разобраться, в чём проблема.


Steel Standoff - 2D аркада.
Мои статьи
pelmenkaДата: Понедельник, 08 Июля 2013, 14:39 | Сообщение # 1005
Драгоценный Тунеядец
Сейчас нет на сайте
GameMix, странно, что он у тебя выдал только эту ошибку. У меня code::blocks 10.05 выдал целых 9 ошибок.
А вообще, nocreate больше не работает, используй std::ios::in


Сталина в каждый дом!
ArchidoДата: Понедельник, 08 Июля 2013, 14:45 | Сообщение # 1006
Сэнсэй
Сейчас нет на сайте
GameMix
Насколько я знаю, "nocreate" не является частью стандарта С++, поэтому его реализация различными компиляторами не гарантируется. GNU С++, например, это не поддерживает. А "ios::in" обычно вполне достаточно.


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Animan2010Дата: Вторник, 09 Июля 2013, 16:33 | Сообщение # 1007
постоянный участник
Сейчас нет на сайте
А почему if(strcmp(buf,word)) возвращает тру, а if(buf == word) нет?

Или это из-за того, что указатели ссылаются на разные участки памяти?


Anima Games
Animan Publishing


Сообщение отредактировал Animan2010 - Вторник, 09 Июля 2013, 16:34
ArchidoДата: Вторник, 09 Июля 2013, 16:39 | Сообщение # 1008
Сэнсэй
Сейчас нет на сайте
Цитата (Animan2010)
Или это из-за того, что указатели ссылаются на разные участки памяти?

Отчасти да. В-первом случае сравниваются сами строки (данные т.е.), которые лежат по этим указателям, а во-втором просто сравниваются адреса указателей и что там лежит уже никого не интересует =)


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Animan2010Дата: Среда, 10 Июля 2013, 12:24 | Сообщение # 1009
постоянный участник
Сейчас нет на сайте
Хелп! В Visual Studio 2012 для записи в файл с помощью fstream требуются права администратора, а в 2008 они не нужны были (что было хорошо).
Можно ли как-нибудь избавиться от необходимости этих прав?


Anima Games
Animan Publishing
pelmenkaДата: Среда, 10 Июля 2013, 12:47 | Сообщение # 1010
Драгоценный Тунеядец
Сейчас нет на сайте
Цитата (Animan2010)
if(strcmp(buf,word)) возвращает тру

Значит buf != word. ЕМНИС, strcmp длжен возвращать 0, если строки равны.


Сталина в каждый дом!
OpenGOOДата: Четверг, 11 Июля 2013, 12:44 | Сообщение # 1011
почти ветеран
Сейчас нет на сайте
Цитата (Animan2010)
Хелп! В Visual Studio 2012 для записи в файл с помощью fstream требуются права администратора, а в 2008 они не нужны были (что было хорошо).
Можно ли как-нибудь избавиться от необходимости этих прав?


За права доступа к файлам отвечает не IDE, а ОС.


Мои проекты:
- Свободный и открытый клон World Of Goo
- TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)

[GameMaker: Studio v1.4.9999]
Animan2010Дата: Пятница, 12 Июля 2013, 10:25 | Сообщение # 1012
постоянный участник
Сейчас нет на сайте
pelmenka, хорошо, что я начал использовать встроенный в hge парсер ini :3
OpenGOO, просто в 2008 такой проблемы не было, что навело меня на мысль.
***************
Ещё вопрос:
Почему выдается предупреждение, когда удаляешь массив указателей? delete [] mas; Его убрать лишь в настройках ide можно, или код изменить (что вряд ли)?
И оператор delete возвращает 0 указателю, когда удаляешь участок памяти, на который он ссылается?


Anima Games
Animan Publishing
ArchidoДата: Пятница, 12 Июля 2013, 15:20 | Сообщение # 1013
Сэнсэй
Сейчас нет на сайте
Цитата (Animan2010)
Почему выдается предупреждение, когда удаляешь массив указателей? delete [] mas; Его убрать лишь в настройках ide можно, или код изменить (что вряд ли)?

Если у тебя просто POD тип данных у массива и нет явного деструктора, то delete [] не нужен, достаточно простого delete.

Цитата (Animan2010)
И оператор delete возвращает 0 указателю, когда удаляешь участок памяти, на который он ссылается?

Нет, надо руками.


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
GameMixДата: Пятница, 12 Июля 2013, 17:01 | Сообщение # 1014
старожил
Сейчас нет на сайте
pelmenka, Archido, спасибо вам. Процесс изучения не стоит на месте... happy Теперь видимо, по сложнее ситуация: сразу код:
Код
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include <fstream.h>

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
FILE *f;
struct Test
{
AnsiString a, b, c;
int d;
};

Test Ya[2];
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
         : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Open1Click(TObject *Sender)
{
f = fopen("123.txt", "r");
int i;
for (i = 0; i < 2; i ++)
fscanf(f, "%10s%10s%10s%10u", Ya[i].a, Ya[i].b, Ya[i].c, &Ya[i].d);
Memo1->Clear();
Memo1->Lines->Add(Ya[i].a);
Memo1->Lines->Add(Ya[i].b);
Memo1->Lines->Add(Ya[i].c);
Memo1->Lines->Add(IntToStr(Ya[i].d));
fclose(f);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Save1Click(TObject *Sender)
{
f = fopen("123.txt", "w");
int i;
for (i = 0; i < 2; i ++)
fprintf(f, "%10s%10s%10s%10u", Ya[i].a, Ya[i].b, Ya[i].c, Ya[i].d);
fclose(f);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
Ya[0].a = "Текст1";
Ya[0].b = "Текст2";
Ya[0].c = "Текст3";
Ya[0].d = 10;
Ya[1].a = "Текст4";
Ya[1].b = "Текст5";
Ya[1].c = "Текст6";
Ya[1].d = 50;
}
//---------------------------------------------------------------------------

Проблема в том, что почему-то программа, сделанная на C++Builder при чтении из файла выбивает ошибку, приходится только нажимать Program Reset. Если работать с обычными переменными или с одной структурой, то всё идёт нормально. Как только хочу работать с несколькими (Ya[i]) - ошибки. Помогите, пожалуйста, знатоки. Может быть, я не до конца понимаю работу с fscanf(). Только не говорите, что проблема в устаревшей среде.


Steel Standoff - 2D аркада.
Мои статьи
RUNGOGET2THECHOPAHДата: Пятница, 12 Июля 2013, 18:42 | Сообщение # 1015
участник
Сейчас нет на сайте
GameMix, а печать в файл корректно работает?
GameMixДата: Пятница, 12 Июля 2013, 19:52 | Сообщение # 1016
старожил
Сейчас нет на сайте
RUNGOGET2THECHOPAH, да, в том-то и прикол smile

Steel Standoff - 2D аркада.
Мои статьи
RUNGOGET2THECHOPAHДата: Пятница, 12 Июля 2013, 20:46 | Сообщение # 1017
участник
Сейчас нет на сайте
А так работает?
Код

int i;
char a[255], b[255], c[255];
for (i = 0; i < 2; i ++)
{
    fscanf(f, "%10s%10s%10s%10u", a, b, c, &Ya[i].d);  
    Ya[i].a = AnsiString(a);
    Ya[i].b = AnsiString(b);
    Ya[i].c = AnsiString(c);    
}
ArchidoДата: Суббота, 13 Июля 2013, 02:15 | Сообщение # 1018
Сэнсэй
Сейчас нет на сайте
GameMix
Лично я там скобочек после цикла не вижу smile , вот таких:
Код

for (i = 0; i < 2; i ++) {
    fscanf(f, "%10s%10s%10s%10u", Ya[i].a, Ya[i].b, Ya[i].c, &Ya[i].d);  
    Memo1->Clear();  
    Memo1->Lines->Add(Ya[i].a);  
    Memo1->Lines->Add(Ya[i].b);  
    Memo1->Lines->Add(Ya[i].c);  
    Memo1->Lines->Add(IntToStr(Ya[i].d));
}


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
GameMixДата: Суббота, 13 Июля 2013, 04:51 | Сообщение # 1019
старожил
Сейчас нет на сайте
Archido, ужас, как я мог не заметить этого facepalm
RUNGOGET2THECHOPAH, Archido, благодарю happy


Steel Standoff - 2D аркада.
Мои статьи
GameMixДата: Суббота, 13 Июля 2013, 13:56 | Сообщение # 1020
старожил
Сейчас нет на сайте
Я увеличил кол-во параметров в структуре и теперь почему-то информация считывается только в том случае, если после запуска программы сохранить и после этого, не закрывая её, загрузить. Если запустить программу и считывать с файла информацию, которая была записана после первого запуска, то вылетает ошибка sad

Steel Standoff - 2D аркада.
Мои статьи
Форум игроделов » Программирование » C/C++ » Вопрос-Ответ (C++) (Вопросы по С++ задаём здесь.)
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг