Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Chalybs + C++ = ;( ??

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
Sorokano
Гость





СообщениеДобавлено: Ср Дек 11 2002 17:07    Заголовок сообщения: Chalybs + C++ = ;( ?? Ответить с цитатой

Я пишу консольную игру The Waters of Chalybs. Пытаясь русифицировать консольное приложение win32, я написал функцию,
заменяющую cin библиотеки iostream для того, чтобы осуществить ввод русских
букв с клавиатуры. Здесть приведен её сегмент: (везде вместо двух
знаков "меньше" после cout стоит // - форум почему-то не позволяет иначе)

char* perevod(char* chrr)
{
int jj;
jj=strlen(chrr);
chrr[0]=' ';
char* chr=chrr;

char ss;
int ch=1;
for(;Wink
{
ch=getche();

switch(ch)
{
c ase 65: ss=8;cout//ss; ss=148 ;chr=strncat(chr,&ss,1); cout//ss; break; //из буквы A->Ф
case 66: ss=8;cout//ss; ss=136 ;chr=strncat(chr,&ss,1); cout//ss; break; //B->И
...
(и так же для всех остальных букв)

(Определение символа "backspace")
case 8: if(chr[0]!=' '){jj=strlen(chr); backspace(&chr[jj-1]," "); ss=8;cout//ss ; break ; } else break;

(Если нажали Enter:)
case 13: chr=strncat(chr,"\0",1); return chr;

}
}
return chr;
}
Функция backspace:
void backspace(char *destination, char *source)
{
char br[2]=" ";
destination=br;
cout//destination;
}
Функция strncat добавляет символ к концу строки.

Коннечно, в моей функции есть несколько недоработок. Но волнует меня не это.
Дело в том, что далее в функции main(), когда я обращаюсь к ф-ии perevod(),
происходят неприятности.
Код такой:
int main()
{
...
char command[256];
cout//"\nКонсоль. Введите команду: \n";
perevod(command);
...
}
Output такой:
Консоль. Введите команду:_

Всё пока, вроде, как надо. НО. Когда я нажимаю backspace
стираются слова "Консоль. ..."! Проверив, что происходит с
содержимым массива command, я выяснил(хотя полностью в
этом не уверен), что вроде как выводимая COUT-ом строка записалась
каким-то образом в массив command в ходе выполнения perevod(command)! Может это нестыковка ф-ии getche() и COUT?
Что делать? Как мне сделать так, чтобы русские символы, введенные
user-ом оставались в нужном массиве???
Спасибо,
Sorokano.
Вернуться к началу
Олигарх



Зарегистрирован: 28.09.2002
Сообщения: 102

СообщениеДобавлено: Ср Дек 11 2002 23:01    Заголовок сообщения: Re: Ответить с цитатой

Тем более если это игра, то зачем в ней backspace? (если я правильно понял, что это текстовый квест). Сделай какую-нибудь кнопку, чтобы очищать полностью команду.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Sorokano
Гость





СообщениеДобавлено: Чт Дек 12 2002 00:05    Заголовок сообщения: Re: Ответить с цитатой

Сделать-то могу, но как сделать, чтобы строка "Консоль.Введите команду: " не попадала в массив? Мне кажется, тут что-то с getche() и cout-ом...возможно их нельзя стыковать. Мне необходимо узнать так это или не так и идефльно было бы получить по этому поводу хороший совет!

Sorokano.
Вернуться к началу
Олигарх



Зарегистрирован: 28.09.2002
Сообщения: 102

СообщениеДобавлено: Чт Дек 12 2002 03:01    Заголовок сообщения: Re: Ответить с цитатой

С - гибкий язык, пробуй другие варианты:

char cmd[255];
int i=0;
while (ch=getch()!=13)
{
cmd[i++] = translate(ch);
}

Или что-то типа того.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Sorokano
Гость





СообщениеДобавлено: Пт Дек 13 2002 01:51    Заголовок сообщения: И так пробовал и эдак... Ответить с цитатой

Попробовал ваш вариант - не помогло ж(
Ну вот всё вроде работает, но этот баг всё портит! Всё равно в результате строка "Консоль.Введите комманду: " оказывается в массиве, который заполняет пользователь!...
OUTPUT примерно такой:
Консоль.Введите комманду: статус игрока сорокано
/*слова "статус игрока сорокано" вводит пользователь*/
Команда не найдена!ано

Вот это "ано" является концовкой строки "статус игрока сорокАНО". Толком непонять что произошло и что с этим делать?
Как избежать записи ненужных строк в массив букв, вводимых пользователем?
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...