Вопрос-Ответ (C++)
| |
Kornival | Дата: Воскресенье, 04 Сентября 2011, 19:10 | Сообщение # 1 |
The Witcher
Сейчас нет на сайте
| Чтобы не создавать отдельную тему на каждый глупый вопрос, предлагаю задавать их здесь.
Saitei: все вопросы по С задаём в теме Вопрос-Ответ (С). Благодарю за внимание!
|
|
| |
dedmoroz | Дата: Понедельник, 10 Ноября 2014, 00:09 | Сообщение # 1381 |
был не раз
Сейчас нет на сайте
| CARATOV, стивен прата
Сообщение отредактировал dedmoroz - Понедельник, 10 Ноября 2014, 00:12 |
|
| |
Alkosha | Дата: Вторник, 18 Ноября 2014, 23:06 | Сообщение # 1382 |
участник
Сейчас нет на сайте
| как извлечь символ из строки string ? Так не получается print1.display(input[0][i]);
error: invalid conversion from 'char' to 'char*' [-fpermissive]|
В функцию print1.display() должен передаваться char*.
Можно весь стринг передать, а не посимвольно. Но нужно его сконвертить в char*Добавлено (18.11.2014, 23:06) --------------------------------------------- Ой... даже не так... Считываю из файла таким образом. Код void readfile() { ifstream file;
int i=0;
file.open("maps", ios::in); if (file) { while (!file.eof()) { file>>input[i]; i++; } file.close(); } }
Сперва думал, что разобьёт по отдельным стрингам строки файла (после каждого /n)... но теперь мне кажется, что разобъётся всё по словам, после каждого пробела.
Сообщение отредактировал Alkosha - Вторник, 18 Ноября 2014, 23:00 |
|
| |
goldsphere | Дата: Среда, 19 Ноября 2014, 08:49 | Сообщение # 1383 |
заслуженный участник
Сейчас нет на сайте
| Цитата Alkosha ( ) ... но теперь мне кажется, что разобьётся всё по словам, после каждого пробела. так и есть. Если нужно вывести всю строку, считанную из файла, можно сделать так getline(file, input); где input - объект типа string. а потом print1.display(input.c_str());
FinderX - Android Аркада
Сообщение отредактировал goldsphere - Среда, 19 Ноября 2014, 08:50 |
|
| |
Alkosha | Дата: Среда, 19 Ноября 2014, 22:03 | Сообщение # 1384 |
участник
Сейчас нет на сайте
| Цитата goldsphere ( ) так и есть. Если нужно вывести всю строку, считанную из файла, можно сделать так
ну вообще хочу сделать систему диалогов. Диалоги хранятся в файле. Каждая реплика отделяется ключевым словом (допустим "next"). И при считывании из файла, нужно каждую реплику расфасовать по отдельным строковым массивам , типа char* (или string, если заюзать c_str()), для последующего вывода.
Добавлено (19 ноября 2014, 18:12) --------------------------------------------- В диалогах будет присутствовать символ \n, разумеется.Добавлено (19 ноября 2014, 22:03) ---------------------------------------------
Цитата goldsphere ( ) а потом print1.display(input.c_str());
Што за?
Цитата E:\TURBO\platform3\main.cpp|974|error: invalid conversion from 'const char*' to 'char*' [-fpermissive]|
Не нравится ему, что константное значение.
Сообщение отредактировал Alkosha - Среда, 19 Ноября 2014, 21:48 |
|
| |
froex | Дата: Среда, 19 Ноября 2014, 23:55 | Сообщение # 1385 |
Руководитель Froexilize team
Сейчас нет на сайте
| Alkosha, строка представляет из себя массив символов, последний из которых должен оканчиваться символом конца строки, или нулевым символом. Цитата Alkosha ( ) print1.display(input[0][i]); Полагаю, что input - массив строк. Хорошо. Тогда каждый элемент этого массива является массивом символов. По сути, input - это массив указателей типа char*. Поэтому можно передавать таким образом: Код print1.display(input[i]) где i - номер строки в массиве input (начиная с нуля), которую нужно передать.
В случае использования стандартных контейнеров типа std::string, взять указатель на строку можно, воспользовавшись методом c_str(): Код std::string input[N]; //... char *s = input[i].c_str();
Цитата Alkosha ( ) Што за?
Цитата E:\TURBO\platform3\main.cpp|974|error: invalid conversion from 'const char*' to 'char*' [-fpermissive]|
Не нравится ему, что константное значение. метод c_str() возвращает константный указатель по причине закрытия возможности управлять содержимым контейнера вручную. Контейнер std::string считает длину хранимой строки и прочую другую информацию. Если будет доступ к хранимой строке по указателю с возможностью замены, то данные контейнера будут фальсифицироваться, что нарушит правильную его работу.
Могу предположить, что метод display() написан вручную, а по названию можно судить, что он не будет менять принимаемый параметр. Так не проще ли подставить квалификатор const в списке параметров? Код void display(const char* src);
Цитата Alkosha ( ) Диалоги хранятся в файле. Каждая реплика отделяется ключевым словом (допустим "next"). И при считывании из файла, нужно каждую реплику расфасовать по отдельным строковым массивам Могу предложить не просто чтение по словам, а сразу же поиск ключевого слова функцией find. Нашлась позиция - можно точно определить количество необходимых символов для хранения реплики. Сохраняем, идём далее - до конца файла.
Не превращайте форум в чат. Пишите более развернуто и понятно - всё равно вас попросят объяснить подробнее. Алгоритмы, программирование, оптимизация, тестирование, ведение проектов. Ищу художника, дизайнера, тестера, программистов С и С++ Обучаю процессам разработки и программированию.
Сообщение отредактировал froex - Четверг, 20 Ноября 2014, 00:02 |
|
| |
geralex | Дата: Четверг, 20 Ноября 2014, 13:24 | Сообщение # 1386 |
участник
Сейчас нет на сайте
| Подскажите пример источника с кодом программы на форме ComboBox, DataGrid, Button. В комбо боксе выводится список вариантов, при нажатии кнопки выполняется запрос в sql с параметром value, который заранее настроен.
Вопрос, как прописать в коде наполнение combobox некими именами, простым для пользователя, а при выполнении скрипта sql использовался некий параметр?
|
|
| |
HPlusDiese | Дата: Четверг, 20 Ноября 2014, 14:16 | Сообщение # 1387 |
участник
Сейчас нет на сайте
| geralex, А гуй какой?
|
|
| |
Alkosha | Дата: Четверг, 20 Ноября 2014, 19:36 | Сообщение # 1388 |
участник
Сейчас нет на сайте
| Цитата froex ( ) void display(const char* src);
Спасибо, сразу полегчало...
но теперь какая-то фигня с кодировками. Латиница правильно отображается, а кириллица - нет. Фонты TTF содержат в себе русскоязычный алфавит. Пробовал файл сохранить в UTF8 и в ANSI - всё равно кракозябры, только в разной кодировке по-своему. Файл редактирую через notepad++ Если выводить буквы непосредственно из программы [print1.display("Аллаху акбар")] , то с кодировкой проблем нет.
|
|
| |
froex | Дата: Четверг, 20 Ноября 2014, 20:14 | Сообщение # 1389 |
Руководитель Froexilize team
Сейчас нет на сайте
| Цитата Alkosha ( ) теперь какая-то фигня с кодировками. Латиница правильно отображается, а кириллица - нет. Фонты TTF содержат в себе русскоязычный алфавит. Пробовал файл сохранить в UTF8 и в ANSI - всё равно кракозябры, только в разной кодировке по-своему. Файл редактирую через notepad++ Если выводить буквы непосредственно из программы [print1.display("Аллаху акбар")] , то с кодировкой проблем нет. Отображается где? На какой платформе? Если вывод в консоль, то можно использовать несколько вариантов: Код setlocale(LC_ALL,"Russian"); Есть костыльный вариант в случае использования dos-кодировки: Code page по умолчанию, если не ошибаюсь, 866, для возврата к ней, используется системный вызов "chcp 866".
При использовании UTF-8 возникает ещё затруднение, т.к. каждый символ кодируется двумя байтами - номером кодовой таблицы и кодом символа в этой таблице. Из-за использования двух байтов, надо хранить их не как char, а как wchar. Кстати, например, вывод тоже отличаеться будет: wcout вместо cout.
Не превращайте форум в чат. Пишите более развернуто и понятно - всё равно вас попросят объяснить подробнее. Алгоритмы, программирование, оптимизация, тестирование, ведение проектов. Ищу художника, дизайнера, тестера, программистов С и С++ Обучаю процессам разработки и программированию.
|
|
| |
Alkosha | Дата: Четверг, 20 Ноября 2014, 21:58 | Сообщение # 1390 |
участник
Сейчас нет на сайте
| Цитата froex ( ) Отображается где? На какой платформе? Если вывод в консоль, то можно использовать несколько вариантов:
Не дос, не консоль, а SDL2 под windows Код textSurface=TTF_RenderText_Solid(fnt,text,color); texxture=SDL_CreateTextureFromSurface(renderer,textSurface); SDL_RenderCopy(renderer, texxture, NULL, &Dest); Где переменная text - та самая const char*.
|
|
| |
froex | Дата: Четверг, 20 Ноября 2014, 22:05 | Сообщение # 1391 |
Руководитель Froexilize team
Сейчас нет на сайте
| Цитата Alkosha ( ) Где переменная text - та самая const char*. При работе с UTF8 желательно хранить строки как массивы wchar. Не могу по памяти сказать - найди функции для преобразования UTF8 в ANSI (wchar в char). Читаешь с файла UTF8 в wchar*, после чего используешь функцию, которая переведёт в char*, потом подаёшь в RenderText функцию.
Не превращайте форум в чат. Пишите более развернуто и понятно - всё равно вас попросят объяснить подробнее. Алгоритмы, программирование, оптимизация, тестирование, ведение проектов. Ищу художника, дизайнера, тестера, программистов С и С++ Обучаю процессам разработки и программированию.
|
|
| |
Alkosha | Дата: Пятница, 21 Ноября 2014, 18:38 | Сообщение # 1392 |
участник
Сейчас нет на сайте
| Цитата froex ( ) после чего используешь функцию, которая переведёт в char*
Похоже, что такая функция есть в вижуал студии и борландовском билдере. Я же использую кодблокс mingw gcc
|
|
| |
froex | Дата: Пятница, 21 Ноября 2014, 19:51 | Сообщение # 1393 |
Руководитель Froexilize team
Сейчас нет на сайте
| Цитата Alkosha ( ) Похоже, что такая функция есть в вижуал студии и борландовском билдере. Я же использую кодблокс mingw gcc Библиотеки и функционал языка, на сколько мне правильно мама объясняла, не зависят от среды разработки. Код, написанный в одной среде, можно скомпилировать и в другой. Работа с wchar - часть возможностей стандартной библиотеки.
Не превращайте форум в чат. Пишите более развернуто и понятно - всё равно вас попросят объяснить подробнее. Алгоритмы, программирование, оптимизация, тестирование, ведение проектов. Ищу художника, дизайнера, тестера, программистов С и С++ Обучаю процессам разработки и программированию.
|
|
| |
Alkosha | Дата: Воскресенье, 23 Ноября 2014, 22:46 | Сообщение # 1394 |
участник
Сейчас нет на сайте
| .....всё равно не понятно.....
считываю не посимольно, а построково. Код while (!file.eof()) { getline(file, input[i]); i++; } file.close(); Но функция getline не работает с wstring, только string.
|
|
| |
-l33t-h4xx- | Дата: Понедельник, 24 Ноября 2014, 06:35 | Сообщение # 1395 |
участник
Сейчас нет на сайте
| Alkosha, так ты загугли в яндексе. Я за минуту нашёл два варианта, почему это может не работать. Вот один, вот второй.
Как правильно задавать вопросы
|
|
| |
Alkosha | Дата: Понедельник, 24 Ноября 2014, 21:12 | Сообщение # 1396 |
участник
Сейчас нет на сайте
| Вроде бы сделал как тута: http://littletechnibbles.com/2009....ng-in-c
Результат всё тот же -> каракули вместо символов.
Код string conv (const wstring& wstr) { return (string(wstr.begin(), wstr.end())); } ... wfstream file; int i=0;
file.open("maps//dialog.dlg", ios::in); if (file) { while (!file.eof()) { getline(file, input[i]); i++; } file.close(); } ... string lin=conv(input[0]); print1.display(lin.c_str(),80,50,w*25,18,200,200,200); ...
|
|
| |
-l33t-h4xx- | Дата: Вторник, 25 Ноября 2014, 12:40 | Сообщение # 1397 |
участник
Сейчас нет на сайте
| Alkosha, хорошо, проблема несколько сложнее. По скудным сведениям, которые ты нам предоставил, я заключил, что ты используешь SDL2_ttf. Открываем руководство и видим: Цитата SDL_Surface *TTF_RenderText_Solid(TTF_Font *font, const char *text, SDL_Color fg)
font Font to render the text with. A NULL pointer is not checked. text The LATIN1 null terminated string to render. О, привет! Тебе наверняка нужна функция TTF_RenderUTF8_Solid, а не эта.
Как правильно задавать вопросы
|
|
| |
Alkosha | Дата: Вторник, 25 Ноября 2014, 18:48 | Сообщение # 1398 |
участник
Сейчас нет на сайте
| Ясно. Даже wstring to string конвертить не надо оказывается.
|
|
| |
daffy-doomer | Дата: Среда, 07 Января 2015, 21:20 | Сообщение # 1399 |
частый гость
Сейчас нет на сайте
| Проблема с бесконечным вращение камеры (OpenGL), возможно с матрицей учудил Код void DrawCamera(int) { float anglex; float angley; int mx, my;
//Обработка вращения; anglex = 0; angley = 0;
POINT cPt; GetCursorPos(&cPt); my=int(cPt.y)-320; GetCursorPos(&cPt); mx=int(cPt.x)-240; SetCursorPos(320,240);
glPushMatrix(); anglex=(mx-(320/2))/16; angley=(my-(240/2))/16;
if (anglex >= 360.0f || anglex <= -360.0f) anglex = 0.0f; if (angley > 80.0f) angley = 80.0f; if (angley < -80.0f) angley = -80.0f;
Rotate (anglex, angley, 0.0f); glPopMatrix();
if(GetAsyncKeyState(VK_ESCAPE)){ exit(0); } return glutTimerFunc(100, DrawFPSCamera, 1); }
Как избавиться от бесконечного, хаотичного, вращения?
|
|
| |
OpenGOO | Дата: Среда, 07 Января 2015, 22:44 | Сообщение # 1400 |
почти ветеран
Сейчас нет на сайте
| Цитата daffy-doomer ( ) Код if(GetAsyncKeyState(VK_ESCAPE)) { exit(0); }
return glutTimerFunc(100, DrawFPSCamera, 1); Для чего ты это здесь написал? Ты сколько дней уже программируешь?
Мои проекты: - Свободный и открытый клон World Of Goo - TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)
[GameMaker: Studio v1.4.9999]
|
|
| |
|