Вопросы по С++ - Форум StarCraft. Alternative.
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Вы вошли как Новобранец
Текущая дата: Понедельник, 29 Апр 2024, 11:35:17
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: Barbanel, vr5  
Форум StarCraft. Alternative. » Starcraft. Alternative. » Программирование (конкретно для нашего проекта) » Вопросы по С++
Вопросы по С++
BarbanelДата: Пятница, 23 Июн 2006, 02:16:55 | Сообщение # 1
Кара небесная
Группа: Администраторы
Сообщений: 705
Репутация: 0
Статус: Offline
Такой вопрос:
есть код:
Code

    {
   printf("Please select the driver you want for this example:\n"\
     " (a) Direct3D 9.0c\n"\
     " (b) Direct3D 8.1\n"\
     " (c) OpenGL 1.5\n"\
     " (d) Software Renderer\n"\
     " (e) Apfelbaum Software Renderer\n"\
     " (f) NullDevice\n"\
     " (otherKey) exit\n\n");

   char i;
   std::cin >> i;

   switch(i)
   {
   case 'a': driverType = video::EDT_DIRECT3D9;break;
   case 'b': driverType = video::EDT_DIRECT3D8;break;
    case 'c': driverType = video::EDT_OPENGL;  break;
    case 'd': driverType = video::EDT_SOFTWARE; break;
    case 'e': driverType = video::EDT_SOFTWARE2;break;
    case 'f': driverType = video::EDT_NULL;   break;
    default: return 1;
   } 
   f1 = fopen("config.cfg","w");
     fputs("VideoDriver="+i,f1);
    fclose(f1);
    }


выдает в файл такое:
Code
ect3D 8.1
 (c) OpenGL 1.5
 (d) Software Renderer
 (e) Apfelbaum Software Renderer
 (f) NullDevice
 (otherKey) exit

Почему, где грабли?


Every cloud in the sky
Every place that I hide
Tell me what I,
I was wrong to let you go...

 
braza87Дата: Пятница, 23 Июн 2006, 10:18:10 | Сообщение # 2
Генерал-майор
Группа: Team Siege
Сообщений: 316
Репутация: 1
Статус: Offline
мдя, странная поместь Си и Си++ну да лана.
видно что-то с выводом уже, раз нет даже "VideoDriver=", но по правде не вижу где проблема. dry выглядит намана


 
vr5Дата: Пятница, 23 Июн 2006, 12:54:41 | Сообщение # 3
Майор
Группа: Team Siege
Сообщений: 86
Репутация: 2
Статус: Offline
Попробуй открыть файл для записи в текстовом режиме
f1 = fopen( "config.cfg", "wt" );
 
BarbanelДата: Пятница, 23 Июн 2006, 15:54:10 | Сообщение # 4
Кара небесная
Группа: Администраторы
Сообщений: 705
Репутация: 0
Статус: Offline
Сенки, дома вечером попробую.
На счат помесей: как вообще лучне работать с файлами в С++?
буду очень признателен за пример.
Дело в том, что я в синтаксисе Си не рублю немного...

Добавлено (23 Июн 2006, 4:54:10 Pm)
---------------------------------------------
Блин, через день на работе Аська отрубается... день работает, день - нет sad


Every cloud in the sky
Every place that I hide
Tell me what I,
I was wrong to let you go...

 
vr5Дата: Пятница, 23 Июн 2006, 16:27:51 | Сообщение # 5
Майор
Группа: Team Siege
Сообщений: 86
Репутация: 2
Статус: Offline
Quote (Barbanel)
На счат помесей: как вообще лучне работать с файлами в С++?

Я думаю от Делфей не сильно оличается.
Можно использовать WinAPI, немного геморно( параметров в функция много лишних), можно без него. Если исползуешь текстовый ввод/вывод, то однозначно стандартные C++ библиотеки надо использовать, если бинарный, то тут на любилеля. Я обычно WinAPI использую./

Example:
//-----------WinAPI
HANDLE h;
char buffer[255];
DWORD rb;
h=CreateFile( strFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0 );
//strFileName - имя файла
//GENERIC_READ - открываем для чтения
//FILE_SHARE_READ - разрешаем доступ к файлу другим процессам
//OPEN_EXISTING - файл должен существовать
ReadFile( h, &buffer, sizeof( buffer ), &rb, NULL );
//rb - количество считанных байт
CloseHandle(h);

//--------Example 2 - pure C
FILE *f = fopen( filename, "r" );
//r - read
//w - write
//rt/wr - чтение/запись в текстовом режиме

 
BarbanelДата: Пятница, 23 Июн 2006, 17:44:38 | Сообщение # 6
Кара небесная
Группа: Администраторы
Сообщений: 705
Репутация: 0
Статус: Offline
vr5, пасиба.
получается, то что я использовал - это был чистый си. Только он почему-то не так работает как я предполагал...

Quote (vr5)
ReadFile( h, &buffer, sizeof( buffer ), &rb, NULL );

А что в данном примере означает "&" ?


Every cloud in the sky
Every place that I hide
Tell me what I,
I was wrong to let you go...

 
vr5Дата: Пятница, 23 Июн 2006, 20:32:00 | Сообщение # 7
Майор
Группа: Team Siege
Сообщений: 86
Репутация: 2
Статус: Offline
Quote (Barbanel)
А что в данном примере означает "&" ?

цитата из хелпа:

The & and * operators work together to reference and dereference pointers that are passed to functions.

Соответственно & и * операторы используются для задания и раскрытия указателя
например:

int i; //декларируем переменную

int *pi; переменная pi является адресом на переменной типа int

pi = &i; //присваиваем переменной pi адрес переменной i

А в данном примере, функция ReadFile требует не саму переменную, а указатель на неё.
Обычно такой способ используют, когда необходимо что-бы функция возвратила не одно а несколько разных значений. Здесь функция возвращает TRUE или FALSE, а в переменной rb количество считанных байт или 0 в случае ошибки.

example:

bool DoSomething( int &i, float &f )
{
//функция что-то делает и возвращает true или false
i = 55;
f = 325.548f;
if( ... ) return true; else return false;
}

//вызов функции
int i = 0; float f = 0.0f;
bool b = DoSomething( &i, &f );
//на выходе i=55, f=325.548

 
BarbanelДата: Пятница, 23 Июн 2006, 22:34:52 | Сообщение # 8
Кара небесная
Группа: Администраторы
Сообщений: 705
Репутация: 0
Статус: Offline
Quote (vr5)
pi = &i; //присваиваем переменной pi адрес переменной i

понял, сенкс. в дельфях это - @.
Quote (vr5)
example: ...

исчерпывающий ответ.

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


Every cloud in the sky
Every place that I hide
Tell me what I,
I was wrong to let you go...

 
vr5Дата: Суббота, 24 Июн 2006, 21:34:03 | Сообщение # 9
Майор
Группа: Team Siege
Сообщений: 86
Репутация: 2
Статус: Offline
Прикольную фишку обнаружил. Оказывется С++ от Microsoft и от Борланда по разному адресуют возвращаемые функцией значения.
Если взять пример выше функции DoSomething и написать следующее

//вызов функции
int i = 0; float f = 0.0f;
DoSomething( &i, &f );

то всё компилится одинаково и в VC и в Builder'е, но в Билдере не работает. Вылезает очень интересная ошибка о том что якобы функция изменяет регист ESP и возврат из функции неможет быть выполнен.

А если так, то всё работает
//вызов функции
int i = 0; float f = 0.0f;
bool b;
b = DoSomething( &i, &f );

Вот такие они разные г-н Гейтс и мистер Борланд:)

 
BarbanelДата: Четверг, 06 Июл 2006, 17:35:56 | Сообщение # 10
Кара небесная
Группа: Администраторы
Сообщений: 705
Репутация: 0
Статус: Offline
ссапаффна smile

Добавлено (06 Июл 2006, 6:35:56 Pm)
---------------------------------------------
Пипель, ХЕЛП!!!
Уже неделю ломаю голову.
Здесь лежит демка в которой реализованы облака на движке Irrlicht. Бинарник работает, а вот код не могу скомпилить. Visual Studio 6 находит в нем пару ошибок, но если их исправить и откомпилить - не работает. Пробовал этот же код (исправленый) включить в свой проект - запускается, но... гыгыгы... облаков нету smile
Может кто-то сказать, на чем это компилилось? и в чем могут быть тут грабли?
Всем сенкс.


Every cloud in the sky
Every place that I hide
Tell me what I,
I was wrong to let you go...

 
MaximsimДата: Среда, 19 Июл 2006, 23:34:17 | Сообщение # 11
Сержант
Группа: Пользователи
Сообщений: 12
Репутация: 0
Статус: Offline
В сомой кривезне ............... а хрен его знает!
Чтоб чтото зделать, нужно понимать как "ОНО" работает или будет работать.....
А взявщи полний проект и компиля его на другой версии VC....
там так не бывает...........
БЕРИ ОТ ЖИЗНИ ТО - ЧТО ОНА ДАЕТ, а не то что хочеш!

-=DELPHI=-

Сообщение отредактировал Maximsim - Среда, 19 Июл 2006, 23:35:37
 
vr5Дата: Среда, 16 Авг 2006, 10:50:54 | Сообщение # 12
Майор
Группа: Team Siege
Сообщений: 86
Репутация: 2
Статус: Offline
Quote (Barbanel)
Visual Studio 6 находит в нем пару ошибок, но если их исправить и откомпилить - не работает. Пробовал этот же код (исправленый) включить в свой проект - запускается, но... гыгыгы... облаков нету

Исправил я этот пример. там дело не в коде а в текстуре. там старая версия движка. ИРР неправильно альфа канал из png файла подгружает. попробуй в Фотожопе другую текстуру для облаков нарисовать и сохранить в tga, должно получиться.

Добавлено (21 Июл 2006, 12:35:12 Pm)
---------------------------------------------
Quote (Barbanel)
Такой вопрос:
есть код:

и эту хрень я исправил
проблема в следующем

fputs("VideoDriver="+i,f1);

в Делфах такой вариант проходит а в С нифига.
надо так
char buffer[255];
sprintf( buffer, "VideoDriver = %s", i );
fputs( buffer, f1 );

так должно получиться:)

Добавлено (16 Авг 2006, 11:50:54 Am)
---------------------------------------------
У меня полное смятение:(
Програмлю я значит свою систему частиц, всё работает прекрасно.
Ставлю новые дрова для видюхи, и ,о чудо, ничего неработает:(
Всё компилится, програма запускается, но частиц невидно.
Поставил старые дрова, всё заработало. Лажа какая-то
Я жутко расстроен:(
В чём может быть проблема, ума не приложу.

 
BarbanelДата: Среда, 16 Авг 2006, 14:24:28 | Сообщение # 13
Кара небесная
Группа: Администраторы
Сообщений: 705
Репутация: 0
Статус: Offline
Млин, хз, чудеса на виражах... а что за видеокарта?
PointSprites ?
Возможно - сырые дрова.
На крайняк, иногда могут на такой вопрос ответить на сайте производителя.

Добавлено (16 Авг 2006, 3:24:28 Pm)
---------------------------------------------
PS давай вечером в аське встретимся, надо поговорить про частицы.


Every cloud in the sky
Every place that I hide
Tell me what I,
I was wrong to let you go...

 
vr5Дата: Среда, 16 Авг 2006, 20:46:12 | Сообщение # 14
Майор
Группа: Team Siege
Сообщений: 86
Репутация: 2
Статус: Offline
Млин, дрова не то что не серые, а они WHQ - сертифицированные Microsoft'ом.
а видюха GeForceFX 5700LE
 
BarbanelДата: Четверг, 17 Авг 2006, 09:58:53 | Сообщение # 15
Кара небесная
Группа: Администраторы
Сообщений: 705
Репутация: 0
Статус: Offline
Quote (vr5)
Млин, дрова не то что не серые, а они WHQ - сертифицированные Microsoft'ом.а видюха GeForceFX 5700LE

Во блин... ХЗ... Остается только спрашивать на сайте NV.


Every cloud in the sky
Every place that I hide
Tell me what I,
I was wrong to let you go...

 
Форум StarCraft. Alternative. » Starcraft. Alternative. » Программирование (конкретно для нашего проекта) » Вопросы по С++
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: