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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.79
goth
0 / 0 / 0
Регистрация: 27.04.2011
Сообщений: 7
#1

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

28.05.2011, 23:14. Просмотров 1892. Ответов 8
Метки нет (Все метки)

кусочек программы словаря процедура перевода слов с английского на русский

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 , забирает следующий вводимый символ пользователем, поэтому ему приходится набирать первый символ два раза, очень неприятная мелочь, думаю проблема решается как то легко, но я начинающий, поэтому дайте мысль
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2011, 23:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос getch(); ожидает ESC и при этом ест вводимый символ (C++):

getch() забирает вводимый элемент - C++
нужно что бы вводились данные, пока пользователь не отменит ввод клавишей ESC делаю так, но тогда первая вводимая цифра числа уходит в...

Как отобразить вводимый символ с клавиатуры - C++
Доброго времени суток ! Такой вопрос : - Вводим символ с клавиатуры, нужно получить его код в разных системах счисления (2,8,16) ...

В какой кодировке getch() возвращает символ? - C++
#include <iostream> #include <Windows.h> #include <conio.h> int main() { SetConsoleOutputCP(1251); char ch; do ...

Esc как символ конца ввода - C++
Доброго времени суток. Есть такой вопрос. Как мне закончить ввод при нажатии esc. Например, если пользователь вводит некий текст (через cin...

Перевести каждый символ в hex, и вывести сообщение об этом - C++
Нужно: Написать программу консольную, которая будет переводить каждый символ в hex, после чего в консоле выводить сообщение об этом ...

Почему исчезают вкладки при нажатии на Esc? - C++
Здравствуйте! Создаю вкладки с использованием Tab Control'а в VC6. Все нормально, но вот только при нажатии на Esc (или Enter) ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
29.05.2011, 00:32 #2
Проверил на простенькой программе - у меня getch() на нажтие esc никак по особенному не игнорирует, ну да а вообще если вам задержку надо сделать то это же не обязательно надо использовать старый бородатый getch, есть много других способов,
C++
1
system("PAUSE")
например.
0
goth
0 / 0 / 0
Регистрация: 27.04.2011
Сообщений: 7
29.05.2011, 00:53  [ТС] #3
Цитата Сообщение от Gepar Посмотреть сообщение
Проверил на простенькой программе - у меня getch() на нажтие esc никак по особенному не игнорирует, ну да а вообще если вам задержку надо сделать то это же не обязательно надо использовать старый бородатый getch, есть много других способов,
C++
1
system("PAUSE")
например.
я использую getch для того чтобы отследить когда пользователь нажмет ESC, для выхода в меню назад, но если ему не надо выйти в меню назад, то он вводит слово которое хочет перевести, но первый символ не вводится,приходится пользователю нажимать два раза первый символ, я так понимаю это происходит из за getch
0
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
29.05.2011, 01:05 #4
C++
1
2
scanf("%s",&sl);
 fscanf(in,"%s %s",&a.rus,&a.angl);
& -убрать
0
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
29.05.2011, 01:12 #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;
}
Советую всё же отказаться от его использования.
 Комментарий модератора 
Используйте теги форматирования кода!
1
bigredcat
365 / 312 / 3
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
29.05.2011, 07:27 #6
Цитата Сообщение от Gepar Посмотреть сообщение
...хотя опять же таки из-за getch символ будет считан, но его будет не видно (при вводе abba в переменную будет считано abba, но на экране будет видно только ввод bba).
Ну, а что мешает вывести на экран этот символ cout << (char) c;
0
goth
0 / 0 / 0
Регистрация: 27.04.2011
Сообщений: 7
29.05.2011, 15:32  [ТС] #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();
    }
}
0
bigredcat
365 / 312 / 3
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
29.05.2011, 17:46 #8
А где проверка z != 254, где повтороное обнуление z?
0
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
31.05.2011, 16:18 #9
Что значит cin.putback работает не всегда? Вы что-то как прочитаете, в даном случае cin.putback(c) возвращает в входящий поток символ находящийся в переменной с. То возвращать то не возвращать оно не может же, это программирование, а не теория вероятностей.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2011, 16:18
Привет! Вот еще темы с ответами:

Getch() + ncurses = НЕ ожидает нажатие символа - C++ Linux
Дорогие товарищи-друзья! Linux на удалённой машине, g++, установлен ncurses, код программы такой: #include &lt;iostream&gt; #include...

Найти вводимый символ с клавиатуры. - Assembler
Всем Добрый вечер! Не могу никак понять где находится вводимое число с клавиатуры. Тип консольный. Листинг с примером ввода цифры...

Вводимый символ с клавиатуры и перемещение его с использованием цифр - Assembler
Выводить в текущее положение курсора символ, введённый с клавиатуры. Этот же символ выводить в позицию выше, ниже, левее или правее...

Заменить вводимый пользователем в ячеку DataGridView символ на другой - Visual Basic .NET
Конкретный пример того что хотелось бы сделать: пользователь вводит число пытаясь поставить десятичный разделитель &lt;точку&gt;, а вместо неё...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
31.05.2011, 16:18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru