Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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(; { 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 примерно такой: Консоль.Введите комманду: статус игрока сорокано /*слова "статус игрока сорокано" вводит пользователь*/ Команда не найдена!ано
Вот это "ано" является концовкой строки "статус игрока сорокАНО". Толком непонять что произошло и что с этим делать? Как избежать записи ненужных строк в массив букв, вводимых пользователем? |
|
Вернуться к началу |
|
|
|