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

getch(); ожидает ESC и при этом ест вводимый символ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.79
goth
0 / 0 / 0
Регистрация: 27.04.2011
Сообщений: 7
28.05.2011, 23:14     getch(); ожидает ESC и при этом ест вводимый символ #1
кусочек программы словаря процедура перевода слов с английского на русский

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
struct types                        
{
   char rus[20],angl[20];               
};
 
FILE *in;int j;char c;
 
void angl_rus()
{
 netF;
 char sl[30];
 clrscr();
 printf ("Введите нужное английское слово:\n");
 while(c!=27){
scanf("%s",&sl);
 types a;
 int p=0;
 in = fopen("slovar.txt", "r");
 while (!feof(in)) {
 fscanf(in,"%s %s",&a.rus,&a.angl);
 if (strcmp(sl,a.rus)==0)
     {
      p=1;
      printf("%s %s\n",a.rus,a.angl);
     }
 }
 if (p==0) printf("Извините, но такого слова в словаре нет\n");
 c=getch();
}
}
Проблема в том что c=getch, ожидая нажатия клавиши ESC , забирает следующий вводимый символ пользователем, поэтому ему приходится набирать первый символ два раза, очень неприятная мелочь, думаю проблема решается как то легко, но я начинающий, поэтому дайте мысль
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
29.05.2011, 00:32     getch(); ожидает ESC и при этом ест вводимый символ #2
Проверил на простенькой программе - у меня getch() на нажтие esc никак по особенному не игнорирует, ну да а вообще если вам задержку надо сделать то это же не обязательно надо использовать старый бородатый getch, есть много других способов,
C++
1
system("PAUSE")
например.
goth
0 / 0 / 0
Регистрация: 27.04.2011
Сообщений: 7
29.05.2011, 00:53  [ТС]     getch(); ожидает ESC и при этом ест вводимый символ #3
Цитата Сообщение от Gepar Посмотреть сообщение
Проверил на простенькой программе - у меня getch() на нажтие esc никак по особенному не игнорирует, ну да а вообще если вам задержку надо сделать то это же не обязательно надо использовать старый бородатый getch, есть много других способов,
C++
1
system("PAUSE")
например.
я использую getch для того чтобы отследить когда пользователь нажмет ESC, для выхода в меню назад, но если ему не надо выйти в меню назад, то он вводит слово которое хочет перевести, но первый символ не вводится,приходится пользователю нажимать два раза первый символ, я так понимаю это происходит из за getch
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
29.05.2011, 01:05     getch(); ожидает ESC и при этом ест вводимый символ #4
C++
1
2
scanf("%s",&sl);
 fscanf(in,"%s %s",&a.rus,&a.angl);
& -убрать
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
29.05.2011, 01:12     getch(); ожидает ESC и при этом ест вводимый символ #5
Цитата Сообщение от goth Посмотреть сообщение
я так понимаю это происходит из за getch
Кажется я понял как работает ваша программа, тогда вам надо сделать что-то вроде этого, хотя опять же таки из-за getch символ будет считан, но его будет не видно (при вводе abba в переменную будет считано abba, но на экране будет видно только ввод bba).
C++
1
2
3
4
5
6
7
8
9
{
    int c;
    char d[128];
    c=getch();
    if(c!='27')
     cin.putback(c);
    cin>>d;
    cout<<d;
}
Советую всё же отказаться от его использования.
 Комментарий модератора 
Используйте теги форматирования кода!
bigredcat
364 / 311 / 3
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
29.05.2011, 07:27     getch(); ожидает ESC и при этом ест вводимый символ #6
Цитата Сообщение от Gepar Посмотреть сообщение
...хотя опять же таки из-за getch символ будет считан, но его будет не видно (при вводе abba в переменную будет считано abba, но на экране будет видно только ввод bba).
Ну, а что мешает вывести на экран этот символ cout << (char) c;
goth
0 / 0 / 0
Регистрация: 27.04.2011
Сообщений: 7
29.05.2011, 15:32  [ТС]     getch(); ожидает ESC и при этом ест вводимый символ #7
Цитата Сообщение от Gepar Посмотреть сообщение
Кажется я понял как работает ваша программа, тогда вам надо сделать что-то вроде этого, хотя опять же таки из-за getch символ будет считан, но его будет не видно (при вводе abba в переменную будет считано abba, но на экране будет видно только ввод bba).
{
int c;
char d[128];
c=getch();
if(c!='27')
cin.putback(c);
cin>>d;
cout<<d;
}
Советую всё же отказаться от его использования.
спасибо за помощь, но почему то не вышло , нагуглил про команду cin.putback я так понял она работает не всегда, видать это мой случай, хотя вроде все просто и должно работать. Юзаю борланд с++ 3.1.=)

решаю свою проблему примерно так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
COORD pos={0,0};
char sss[255];
int z=0;
c=getch;
while(1)
{
    if(c==27)   break;
    while(1)
    {
        if(c=='\n') break;
        sss[z]=c;
        WriteConsoleOutputCharacter(conout,&c,1,pos,&res);
        z++;
        pos={z,0};
        c=getch();
    }
}
bigredcat
364 / 311 / 3
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
29.05.2011, 17:46     getch(); ожидает ESC и при этом ест вводимый символ #8
А где проверка z != 254, где повтороное обнуление z?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2011, 16:18     getch(); ожидает ESC и при этом ест вводимый символ
Еще ссылки по теме:

Как отобразить вводимый символ с клавиатуры C++
Вывести строки, в которых символ «*» встречается не менее 2 раз и заменить символ «*» на символ «_» C++
Программа, которая ожидает ввод числа C++

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

Или воспользуйтесь поиском по форуму:
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
31.05.2011, 16:18     getch(); ожидает ESC и при этом ест вводимый символ #9
Что значит cin.putback работает не всегда? Вы что-то как прочитаете, в даном случае cin.putback(c) возвращает в входящий поток символ находящийся в переменной с. То возвращать то не возвращать оно не может же, это программирование, а не теория вероятностей.
Yandex
Объявления
31.05.2011, 16:18     getch(); ожидает ESC и при этом ест вводимый символ
Ответ Создать тему
Опции темы

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