Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2010, 19:20   #1
Кипящий чайник
Форумчанин
 
Регистрация: 17.12.2009
Сообщений: 101
По умолчанию Распознавание команд для текстового квеста

Продвигаясь по созданию собственного текстового квеста, я наткнулся на новую проблему. Излагаю:
В квесте, как и положено, надо вводить команду.
Вводимая команда как бы делится на два слова - на действие (возьми) и объект, над которыми будет проводиться надругательство. То есть

char part1[16], part2[16];

С помощью ранее описанных классов создаются действие и объект, в конструкторах описаны их названия.

action take("возьми"); object guitar("гитара");

Таким образом, объект take класса action носит имя "возьми", хранимое в переменной char name[16].
Теперь, когда прошлая проблема распознавания кириллицы разрешилась функцией strcmp, я проработал функцию, анализирующую введёную команду:


void Analysis(char part1[16], char part2[16]){
if (strncmp(part1, take.name, 4)==1) Take(part2)//Таким образом, для объекта выполняется функция Take, то есть его берут
И т.д...
}
Но только вот что... Кайф идиота обломался быстро: а как ввести за раз вторую часть команды, то есть объект?
А то команда cin >> part1,part2 при компиляции ошибки не выдаёт, но, тем не менее, после пробела ничего считывать не желает, и part2 так и остаётся незаполненной.
Как бы поэлегантнее решить эту проблему?
Кипящий чайник вне форума Ответить с цитированием
Старый 17.01.2010, 20:11   #2
BleStaR
Форумчанин
 
Регистрация: 25.09.2009
Сообщений: 234
По умолчанию

один из способов это использование scanf("%s%s",...) - но я думаю что тебе надо не это, так как ввод будет осуществляться через enter

на мой взгляд лучше так: вводимая строка ("действие объект") считывается в некий массив 's'. После чего ты просто уже разбиваешь его на две части относительно пробела. И с полученными частями выполняешь необходимые действия.

P.S. На сколько я знаю в сишке есть стандартная функция разбиения строки на части относительно некого разделителя (аналог объекта StringTokenizer'a в Java'e). Но я не знаю что это за функция, найдешь - будет тебе радость ))))
BleStaR вне форума Ответить с цитированием
Старый 17.01.2010, 20:37   #3
_Ч_
Форумчанин
 
Регистрация: 07.01.2010
Сообщений: 141
По умолчанию

string s1;
string s2;
cin >> s1 >> s2;
cout << s1 << endl;
cout << s2 << endl;

в консоле можно вводить слова через пробел. второе слово засунется в s2;
_Ч_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Движок для городского квеста theFEAR Общие вопросы по Java, Java SE, Kotlin 6 14.01.2010 13:26
Движок для текстового квеста Кипящий чайник Общие вопросы C/C++ 9 18.12.2009 19:24
реализация команд с помощью набора других команд zhenyaa Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 08.11.2009 21:37
Компонент для исполнения команд postal2 Компоненты Delphi 2 15.10.2009 18:10
Срочно! Необходимо написать плагин для Skype (автонабор, распознавание голоса) Alexls Фриланс 12 10.09.2007 06:17