Вопрос-Ответ (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, спасибо вам. Процесс изучения не стоит на месте... Теперь видимо, по сложнее ситуация: сразу код:Код //---------------------------------------------------------------------------
#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, да, в том-то и прикол
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 Лично я там скобочек после цикла не вижу , вот таких: Код 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, ужас, как я мог не заметить этого RUNGOGET2THECHOPAH, Archido, благодарю
Steel Standoff - 2D аркада. Мои статьи
|
|
| |
GameMix | Дата: Суббота, 13 Июля 2013, 13:56 | Сообщение # 1020 |
старожил
Сейчас нет на сайте
| Я увеличил кол-во параметров в структуре и теперь почему-то информация считывается только в том случае, если после запуска программы сохранить и после этого, не закрывая её, загрузить. Если запустить программу и считывать с файла информацию, которая была записана после первого запуска, то вылетает ошибка
Steel Standoff - 2D аркада. Мои статьи
|
|
| |
|