Вопросы по С++
| |
Barbanel | Дата: Пятница, 23 Июн 2006, 02:16:55 | Сообщение # 1 |
Кара небесная
Группа: Администраторы
Сообщений: 705
Статус: 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
Статус: Offline
| мдя, странная поместь Си и Си++ну да лана. видно что-то с выводом уже, раз нет даже "VideoDriver=", но по правде не вижу где проблема. выглядит намана
|
|
| |
vr5 | Дата: Пятница, 23 Июн 2006, 12:54:41 | Сообщение # 3 |
Майор
Группа: Team Siege
Сообщений: 86
Статус: Offline
| Попробуй открыть файл для записи в текстовом режиме f1 = fopen( "config.cfg", "wt" );
|
|
| |
Barbanel | Дата: Пятница, 23 Июн 2006, 15:54:10 | Сообщение # 4 |
Кара небесная
Группа: Администраторы
Сообщений: 705
Статус: Offline
| Сенки, дома вечером попробую. На счат помесей: как вообще лучне работать с файлами в С++? буду очень признателен за пример. Дело в том, что я в синтаксисе Си не рублю немного...Добавлено (23 Июн 2006, 4:54:10 Pm) --------------------------------------------- Блин, через день на работе Аська отрубается... день работает, день - нет
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
Статус: 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
Статус: 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
Статус: 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
Статус: Offline
| Quote (vr5) | pi = &i; //присваиваем переменной pi адрес переменной i | понял, сенкс. в дельфях это - @. исчерпывающий ответ. Я тут может быть совсем ламерские вопросы задаю, не пинайте ногами. Навыки программирования все равно остаются
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
Статус: 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
Статус: Offline
| ссапаффна Добавлено (06 Июл 2006, 6:35:56 Pm) --------------------------------------------- Пипель, ХЕЛП!!! Уже неделю ломаю голову. Здесь лежит демка в которой реализованы облака на движке Irrlicht. Бинарник работает, а вот код не могу скомпилить. Visual Studio 6 находит в нем пару ошибок, но если их исправить и откомпилить - не работает. Пробовал этот же код (исправленый) включить в свой проект - запускается, но... гыгыгы... облаков нету Может кто-то сказать, на чем это компилилось? и в чем могут быть тут грабли? Всем сенкс.
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
Статус: Offline
| В сомой кривезне ............... а хрен его знает! Чтоб чтото зделать, нужно понимать как "ОНО" работает или будет работать..... А взявщи полний проект и компиля его на другой версии VC.... там так не бывает........... БЕРИ ОТ ЖИЗНИ ТО - ЧТО ОНА ДАЕТ, а не то что хочеш! -=DELPHI=-
Сообщение отредактировал Maximsim - Среда, 19 Июл 2006, 23:35:37 |
|
| |
vr5 | Дата: Среда, 16 Авг 2006, 10:50:54 | Сообщение # 12 |
Майор
Группа: Team Siege
Сообщений: 86
Статус: 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
Статус: 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
Статус: Offline
| Млин, дрова не то что не серые, а они WHQ - сертифицированные Microsoft'ом. а видюха GeForceFX 5700LE
|
|
| |
Barbanel | Дата: Четверг, 17 Авг 2006, 09:58:53 | Сообщение # 15 |
Кара небесная
Группа: Администраторы
Сообщений: 705
Статус: 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...
|
|
| |
|