Форум программистов, компьютерный форум CyberForum.ru

Текстовая RPG в консоли по правилам D&D - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
Palov
0 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 13
29.01.2013, 21:37     Текстовая RPG в консоли по правилам D&D #1
Доброго времени суток! Решил попробовать себя на новой, так сказать, стезе. Буду рад любой помощи в плане организации хранения информации, ведь текста будет очень много, а доступ к нему должен быть быстрым и удобным.

Возник первый вопрос:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
struct chparams {
                    char* Name;//Имя персонажа
                    char* Class; //Класс персонажа
                    int years; //Возраст
                    int power;//Сила
                    int agility;//Ловкость
                    int constitution;//Телосложение
                    int intellegence;//Интелект
                    int wisdom;//Мудрость
                    int charism;//Обаяние
                };
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    chparams mainp = {"Без имени","Без класса",1,1,1,1,1,1,1};
    int id = 0;
    cout << "\n Введите имя персонажа:";
    scanf("%s",mainp.Name);
    cout << mainp.Name;
    getch();
    return 0;
}
Данная проверка работоспособности показала наличие ошибки при попытке ввода, а именно нарушение прав доступа к записи. Объясните пожалуйста, что не правильно.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.01.2013, 21:37     Текстовая RPG в консоли по правилам D&D
Посмотрите здесь:

Проблема с проверкой условия цикла for( int i=2; !((n%i||d%i)&&!(n%i&&d%i))==0 ; i++) C++
C++ Клавиши F1-F12 в консоли, и работа с мышкой в консоли
В заштрихованную фигуру бросают точки с координатами x и y. Получить координаты первой точки не попавшей в эту область (фигура x*x+y*y<25&&x*x+y*y>=9& C++
C++ Почему friend ostrem& operator <<(ostream& outs, const Rational&); - invalid function declaration?
Создание простой RPG C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Palov
0 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 13
29.01.2013, 22:57  [ТС]     Текстовая RPG в консоли по правилам D&D #21
То есть править нужно в описание структуры chparams? Не знаю, как выделить память для char*. Структуру описывал сверяясь с учебником Подбельского. У него есть очень похожий пример, и в нём, судя по всему, всё работало...
Разобрался, спасибо soon.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dederkay
 Аватар для dederkay
34 / 34 / 0
Регистрация: 08.12.2010
Сообщений: 161
29.01.2013, 23:01     Текстовая RPG в консоли по правилам D&D #22
может я и ошибаюсь(если так то исправьте), но для "снятия" константности существует некрасивый хак const_cast, ну и мютабл? а подобные синтаксические ерудновины не есть хорошо.
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
29.01.2013, 23:02     Текстовая RPG в консоли по правилам D&D #23
Croessmah, это я читал. Ну не слово в слово, но смысл был такой же. Тогда пример soon действителен. Но и мой-то, тоже действителен. Там строка записывается в массив, который просто помечен как конст.

Добавлено через 54 секунды
dederkay, конст_каст - это си++ style. В си использовались приведения типов
dederkay
 Аватар для dederkay
34 / 34 / 0
Регистрация: 08.12.2010
Сообщений: 161
29.01.2013, 23:05     Текстовая RPG в консоли по правилам D&D #24
Цитата Сообщение от Kgfq Посмотреть сообщение
конст_каст - это си++ style
та я вроде не говорил что это из си, или речь идет именно о нем?
Не зря в С++ тоже есть приведение типов, правда их синтаксис немного красивее, из за возможности перегрузки оператора приведения к типу.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
29.01.2013, 23:07     Текстовая RPG в консоли по правилам D&D #25
Цитата Сообщение от dederkay Посмотреть сообщение
может я и ошибаюсь
Не ошибаетесь, но UB это все равно не отменяет.

Добавлено через 39 секунд
Цитата Сообщение от Kgfq Посмотреть сообщение
Но и мой-то, тоже действителен
По ссылке в конце предудущей страницы перейдите.
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
29.01.2013, 23:09     Текстовая RPG в консоли по правилам D&D #26
dederkay, я к тому, что никакой это не хак, а просто переиначенное приведение типов.

Насчет ассемблера я не лукавлю. При желании можно залезть и в память процесса и изменить что надо. И в программу, лежащую на харде

Добавлено через 37 секунд
soon, я смотрел. Это зависит от того, что делает сам компилятор. Мой - справился.
dederkay
 Аватар для dederkay
34 / 34 / 0
Регистрация: 08.12.2010
Сообщений: 161
29.01.2013, 23:09     Текстовая RPG в консоли по правилам D&D #27
Цитата Сообщение от soon Посмотреть сообщение
Не ошибаетесь, но UB это все равно не отменяет.
А мютабл ведь не приводит к ЮБ?(когда речь идет о снятии константности, вроде и не настоящем).
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
29.01.2013, 23:11     Текстовая RPG в консоли по правилам D&D #28
Цитата Сообщение от Kgfq Посмотреть сообщение
Насчет ассемблера я не лукавлю. При желании можно залезть и в память процесса и изменить что надо. И в программу, лежащую на харде
А вы не задумывались, что const квалификаторы пишутся в первую очередь для людей, а не для машин?

Добавлено через 1 минуту
Цитата Сообщение от dederkay Посмотреть сообщение
А мютабл ведь не приводит к ЮБ?
С mutable все ок.
dederkay
 Аватар для dederkay
34 / 34 / 0
Регистрация: 08.12.2010
Сообщений: 161
29.01.2013, 23:11     Текстовая RPG в консоли по правилам D&D #29
Цитата Сообщение от Kgfq Посмотреть сообщение
переиначенное приведение типов
Ну ведь не советуют его использовать
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
29.01.2013, 23:15     Текстовая RPG в консоли по правилам D&D #30
soon, я же не утверждаю, что нужно снимать const налево и направо. Но возможен гипотетический случай, когда это нужно будет сделать.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class A
{
public:
    A(){ a = 5; }
    int a;
};
 
 
void func(const A *obj)
{
    A *o = (A*)obj;
    int a = o->a;
    o->a = 3;
    // действия
    o->a = a;
}

Человеку важно видеть, что объект не изменится. Объект действительно не меняется в итоге. А для работы его неконстантность может быть удобна.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
29.01.2013, 23:18     Текстовая RPG в консоли по правилам D&D #31
Цитата Сообщение от Kgfq Посмотреть сообщение
Это зависит от того, что делает сам компилятор. Мой - справился.
И что? Это как было UB, так и осталось.
Цитата Сообщение от dederkay Посмотреть сообщение
Ну ведь не советуют его использовать
Правильно. Его проще проморгать, и, притом, он последовательно перебирает все возможные преобразования
C++
1
2
3
4
5
const_cast
static_cast
static_cast + const_cast
reinterpret_cast
reinterpret_cast + const_cast
Что не есть хорошо.

Добавлено через 2 минуты
Цитата Сообщение от Kgfq Посмотреть сообщение
Но возможен гипотетический случай, когда это нужно будет сделать.
Передать по ссылке? Неет, зачем, давайте забубеним константный указатель а потом снимем с него константность! UB от этого не пропадает, повторяю уже раз в третий.
Croessmah
29.01.2013, 23:19
  #32

Не по теме:

Цитата Сообщение от Kgfq Посмотреть сообщение
Мой - справился.
Это какой?

Kgfq
29.01.2013, 23:22
  #33

Не по теме:

Croessmah, VS2012

Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11815 / 6794 / 769
Регистрация: 27.09.2012
Сообщений: 16,862
Записей в блоге: 2
Завершенные тесты: 1
29.01.2013, 23:22     Текстовая RPG в консоли по правилам D&D #34
А с таким справится?
C++
1
2
3
4
5
const char constStr[16] = "qwe";
int main(){ 
    char *str = (char*)constStr;
    *str = 'y';
}
Ну компилятор то справится, а что будет при запуске?
P.S. Но это студия
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
29.01.2013, 23:24     Текстовая RPG в консоли по правилам D&D #35
soon, если передавать по ссылке, то это может быть всего лишь объект в стеке. Тогда действительно результат непредсказуем. А так - вполне предсказуем, потому что обращение происходит к реально существующему объекту
dederkay
 Аватар для dederkay
34 / 34 / 0
Регистрация: 08.12.2010
Сообщений: 161
29.01.2013, 23:26     Текстовая RPG в консоли по правилам D&D #36
Цитата Сообщение от soon Посмотреть сообщение
Но возможен гипотетический случай,
Как на меня слишком много против, по сему, когда можно обойтись без сего, то стоит так и сделать.
Цитата Сообщение от soon Посмотреть сообщение
последовательно перебирает
спасибо, думал что сделано немного по другому, не знаете почему он так делает? И ваще приведения типов плохая штуковина, книжки говорят что когда у вас появляется необходимость приводить к типу, стоит подумать как сделать так чтоб такого не было нужно.
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
29.01.2013, 23:28     Текстовая RPG в консоли по правилам D&D #37
Croessmah, при использовании глобальной переменной - краш, локальной - все проходит как по маслу

Добавлено через 1 минуту
dederkay, даже приведения типа void* -> int* или unsigned char* -> float* ?
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
29.01.2013, 23:32     Текстовая RPG в консоли по правилам D&D #38
Цитата Сообщение от dederkay Посмотреть сообщение
думал что сделано немного по другому, не знаете почему он так делает?
А как по-другому?

Цитата Сообщение от dederkay Посмотреть сообщение
И ваще приведения типов плохая штуковина, книжки говорят что когда у вас появляется необходимость приводить к типу, стоит подумать как сделать так чтоб такого не было нужно.
Вопрос довольно спорный. Не вижу ничего плохого в static_cast. Остальные нужно просто уметь использовать.

Kgfq, Так. Делать. Нельзя. Точка.
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
29.01.2013, 23:34     Текстовая RPG в консоли по правилам D&D #39
soon, ты сам только что сказал "остальные нужно просто уметь использовать". Давай завершим этот спор, потому что ни к чему конструктивному он не приведет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.01.2013, 00:34     Текстовая RPG в консоли по правилам D&D
Еще ссылки по теме:

ostream &operator<< (ostream &output, const Array &obj) - что означает эта строка? C++
Выделение памяти для буффера, под std::istream& operator>>(std::istream &, String &) C++
Friend ostream& operator<<(ostream& stream, CArr& obj); C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
UnsKneD
алкокодер
 Аватар для UnsKneD
153 / 149 / 11
Регистрация: 27.12.2012
Сообщений: 548
30.01.2013, 00:34     Текстовая RPG в консоли по правилам D&D #40
C++
1
2
string Name;//Èìÿ ïåðñîГ*Г*Г¦Г*
string Class; //ГЉГ«Г*Г±Г± ïåðñîГ*Г*Г¦Г*
А ввод лучше так сделать, тогда имя можно с пробелами вводить.
C++
1
getline(cin, mainp.Name);
Yandex
Объявления
30.01.2013, 00:34     Текстовая RPG в консоли по правилам D&D
Ответ Создать тему
Опции темы

Текущее время: 14:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru