Результаты поиска
| |
Tikara | Дата: Среда, 26 Декабря 2012, 10:08 | Сообщение # 21 | Тема: Вопрос-Ответ (C++) |
частый гость
Сейчас нет на сайте
| Цитата (Saitei) здравствуйте! Я использую для ввода значений переменным cin. Часто так бывает, что пользователь вводит некорректные данные с точки зрения компьютера. Например в int a кто-то пытается запихнуть "пвып" или "2,2". Скажите пожалуйста, как "ограничить" и "наладить" всё это дело? Не думаю, что всё очень сложно, но для меня это будет очень полезно. Заранее спасибо - жду с нетерпением!
Если хочешь использовать потоки cin cout, то строку с консоли считывай не прямиком, а сначало в массив символов, а там уже проверяй.
Например
Код std::string str; int num;
std::cin >> str;
if(!isValidNumber(str)) std::cout << "Это не число!\n"; else num = atoi(str.c_str());
Сообщение отредактировал Tikara - Среда, 26 Декабря 2012, 10:12 |
|
| |
Tikara | Дата: Четверг, 17 Мая 2012, 02:32 | Сообщение # 22 | Тема: Вопрос-Ответ (C++) |
частый гость
Сейчас нет на сайте
| Snuux, можно точнее какую ошибку выдаёт среда? И какой компилятор вы используете?
Возвращать значение в void main(){} не обязательно.
Quote (Snuux) if (a%4 == 0) printf("Число кратно четырем");
Число кратно четырем, когда остаток при делении числа на 4 равен нулю.
|
|
| |
Tikara | Дата: Среда, 09 Мая 2012, 12:09 | Сообщение # 23 | Тема: Вопрос-Ответ (C++) |
частый гость
Сейчас нет на сайте
| Quote (KpoJIuk) Посоны, подкиньте реализацию или идею. Мне нужно создать динамический массив из объектов своего класса, к каждому из элементов которого должен быть вызван конструктор со своими параметрами.
Code class Object { public: Object(int state); };
Object::Object(int state){ switch(state) { case 1: //... break;
case 2: //... break;
case 3: //... } }
int main(){ Object **obj; obj = new Object*[3]; obj[0] = new Object(1); obj[1] = new Object(2); obj[2] = new Object(3);
}
Я правильно понял?
|
|
| |
Tikara | Дата: Среда, 09 Мая 2012, 06:14 | Сообщение # 24 | Тема: Вопрос-Ответ (C++) |
частый гость
Сейчас нет на сайте
| Code switch (a) { case 1: cout<<"Вы пытаетесь его поднять, но он тяжелее чем вы думали.\nВаши следующие действия:\n 1.Пойду куда шол, зачем мне 300киллограммовый камень\?\n 2.Позвать на помощь прохожих.\n 3.Попытаюсь его сломать ломом.\n 4.Попробовать на вкус.\n"; // break здесь не нужен, раз здесь идёт выбор cin >> e; // e = e + 4 ; зачем складывать с 4? switch (e) { case 1:Действие1 case 2:Действие2 case 3:Действие3 case 4:Действие4 } break; // здесь нужен break
Во-первых, ваш код просто ужасен и нелогичен. Во-вторых, если уже смотреть ошибку в вашем алгоритме, то убирите оператор break; перед cin >> e;. switch(a) просто прерывается и не доходит до выполнения cin.
Всё же, если вы собрались сделать линейный квест с небольшим выбором, то используйте switch-case только для выбора вариантов действий.
Рекомендую читануть самоучитель по C++. (не удивлюсь, если такие советы вам уже поступали)
|
|
| |
Tikara | Дата: Вторник, 08 Мая 2012, 17:48 | Сообщение # 25 | Тема: Вопрос-Ответ (C++) |
частый гость
Сейчас нет на сайте
| Quote (luiss) if (strchr(vowel, symbol[i])) ch = static_cast<char>(symbol[i] & 0xFC); else ch = static_cast<char>(symbol[i] | 0x0A);
strchr(vowel, symbol[i]) - ищем первый символ symbol[i] и проверяем найден или нет (здесь, видимо, идёт проверка гласный ли символ в массиве symbol)
ch = static_cast<char>(symbol[i] & 0xFC); - преобразуем int-овое значение symbol[i] в char
|
|
| |
Tikara | Дата: Вторник, 08 Мая 2012, 14:55 | Сообщение # 26 | Тема: Ошибка в ограничителе кадров |
частый гость
Сейчас нет на сайте
| Не знаю кто вам посоветовал использовать CTime.wMilliseconds. Посидев и подумав над реализацией через ctime, в голове пробегали ситуации с ошибками, которых, как мне кажется, чтобы отловить потребуются костыли.
|
|
| |
Tikara | Дата: Вторник, 08 Мая 2012, 13:30 | Сообщение # 27 | Тема: Ошибка в ограничителе кадров |
частый гость
Сейчас нет на сайте
| Quote (Xe|N|o) Да, это конечно круто, но переменная со временем, сбрасывается раз в 49 дней, если не ошибаюсь.
Тогда такой вопрос. Вы рассчитываете на то, что найдется пользователь, запустивший вашу игру с компьютера, который работал 49 дней и хотите это предотвратить? Лично мне кажется, что такой вариант маловероятен. Code // Эту часть выполните перед запуском основного цикла // int DrawTimer; int TimeNow; int StartUpTime = timeGetTime(); //////////////////////////////////
void _draw(int temp){ if((DrawTimer=temp) >= 40) { draw(); SwapBuffers(dc); StartUpTime = TimeNow; } }
TimeNow = timeGetTime();
if(TimeNow < StartUpTime)
_draw(4294967296 - StartUpTime + TimeNow); else
_draw(TimeNow - StartUpTime);
Но, если вы настаиваете, осмелюсь предложить такой вариант.
Код подправил - заметил ошибочку.
Сообщение отредактировал Tikara - Вторник, 08 Мая 2012, 14:24 |
|
| |
Tikara | Дата: Вторник, 08 Мая 2012, 12:17 | Сообщение # 28 | Тема: Ошибка в ограничителе кадров |
частый гость
Сейчас нет на сайте
| Давайте попробуем разобраться
Code // Эту часть выполните перед запуском основного цикла // int DrawTimer; int StartUpTime = timeGetTime(); //////////////////////////////////
if((DrawTimer=timeGetTime() - StartUpTime) >= 40) { draw(); SwapBuffers(dc); StartUpTime = timeGetTime(); }
Хотелось бы узнать, какое значение имеет DrawTimer до первого запуска цикла?
Дописал вашу программу, если ошибка останется или алгоритм вас не устроит, хотелось бы услышать причину и в чем толк вашего алгоритма?
Сообщение отредактировал Tikara - Вторник, 08 Мая 2012, 12:40 |
|
| |
Tikara | Дата: Вторник, 08 Мая 2012, 05:33 | Сообщение # 29 | Тема: классы в с++ |
частый гость
Сейчас нет на сайте
| Private может использовать только сам объект, Public можно использовать где угодно
Code class Object { public: int x;
void SetY(int _y); private: int y;
};
void Object::SetY(int _y){ y = _y; }
int main(){ Object obj;
int a;
obj.x = a; // всё хорошо
obj.y = a; // приват, доступ ограничен
obj.SetY(a); // ЭПИК ВИН }
Сообщение отредактировал Tikara - Вторник, 08 Мая 2012, 05:35 |
|
| |
Tikara | Дата: Вторник, 08 Мая 2012, 05:21 | Сообщение # 30 | Тема: C++ Чтение из файла, запись в файл. |
частый гость
Сейчас нет на сайте
| Чтение файла
FILE *file;
file=fopen("file", "rb");
// "rb" - устанавливаем режим работы с файлом // r - чтение файла; // b - побайтовое чтение
char _FILE[100], *temp;
while((temp = fgets(_FILE, 100, file)) != NULL){ // Читаем текстовый файл до последней строки, temp - указатель на символы каждой строки, _FILE - буфер
}
int state[100]; fread( &state, sizeof(int),100 , file ); // Читаем файл побайтово, 1 передаём указатель на буфер, 2 размер в байтах, 3 кол-во обьектов для чтения, 4 указатель на открытый файл
fclose(file); // Закончим работу с файлом
Запись в файл
FILE *file;
file=fopen("file", "wb");
// "wb" - устанавливаем режим работы с файлом // w - запись в файл // b - побайтовая запись
MyObject mo[10]; fwrite(&mo,sizeof(MyObject),10,file); // Записываем в файл побайтово, аналогично с чтением
fprintf(file, "ololo"); // текстовая запись в файл (синтаксис ф-ции, аналогичен с printf())
fclose(file); // Закончим работу с файлом
|
|
| |
Tikara | Дата: Среда, 21 Марта 2012, 18:24 | Сообщение # 31 | Тема: 2D Sapphire |
частый гость
Сейчас нет на сайте
| warzes, Quote Но для опытных программистов этот движок дает море возможностей вмешаться в любую его часть и изменить по своему усмотрению, без изменения самого кода движка.
Хотелось бы поподробней узнать как это реализовано.
пс в windmill 2dge этого очень не хватает.
|
|
| |
Tikara | Дата: Среда, 14 Марта 2012, 09:35 | Сообщение # 32 | Тема: WindMill 2D Game Engine |
частый гость
Сейчас нет на сайте
| Возникла проблема с методом SetMyCursor, выскакивает ошибка компиляции что-то вроде найдено 1 или более неразрешенных внешних элементов. Кто тестил, возможно ли с этим как-то бороться? Кстати, эта функция отображает изменённый курсор ТОЛЬКО в области приложения/игры? Чтобы её использование было хоть как-то полезнее, чем SetSystemCursor.
Пишу в визуалке 2010 на c++. Версия движка, естественно, 1.40.
надеюсь на скорый ответ.
|
|
| |
|