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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.80
popoff17
10 / 10 / 2
Регистрация: 13.07.2010
Сообщений: 206
#1

Отследить ввод с клавиатуры... - C++

25.07.2011, 20:28. Просмотров 3776. Ответов 8
Метки нет (Все метки)

Доброго времени суток!

Господа прошу помочь решить такую задачу: в консольном приложении нужно запретить ввод символов и цыфр, только буквы... Посоветовали мне "юзать getch()" но как его использовать ни примеров, ни объяснений я не смог найти. т.е. я смог после ввода прочитать коды введенных символов, но хотелось бы прямо во время нажатия на клавишу блокировать ненужные символы (знаки и цифры). подскажите пожалуйста как можно реализовать? может каким другим путем пойти?

пока что сделал проверку введенных данных функцией isalpha(), но так бы не желательно для меня...

в данный момент имею вот что:

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
void main() {
char imya[255], familya[255], otch[255];
    int act, year;
    menu:
    std::setlocale(LC_ALL, "Russian_Russia.1251");
 
std::cout << "Добро пожаловать в управление конференциями!"<<std::endl;
std::cout << "Выберете действие!"<<std::endl;
std::cout << ""<<std::endl;
std::cout << "1 -Ввод данных участника конференции."<<std::endl;
std::cin>>act;
 
if(!std::cin.good()){
std::cout<<"Некорректные данные"<<std::endl;
std::cin.clear();
std::cin.ignore(255, '\n').get();
}
 
 
switch (act){
                case 1:
familya:
std::cout << "Введите фамилию!"<<std::endl;
std::cin>>familya;
int i, len = std::strlen(familya);              //ОРГАНИЗУЕМ ПОСИМВОЛЬНОЕ ЧТЕНИЕ СТРОКИ
for(i=0; i<len; ++i){
    std::cout<<std::isalpha (familya[i])<<std::endl;
    if (isalpha (familya[i]) == 0){             //ПРОВЕРКА СИМВОЛОВ, ЕСЛИ НЕ БУКВА ТО ОШИБКА!!!
    std::cout<<"\nerror, try again!\n\n";
    goto familya;                                   //ПЕРЕХОД К НАЧАЛУ ВВОДА
    }}
 
 
std::cout << "Введите имя!"<<std::endl;
std::cin>>imya;
std::cout <<imya<<std::endl;
 
 
std::cout << "Введите отчество!"<<std::endl;
std::cin>>otch;
std::cout <<otch<<std::endl;
 
 
std::cout << "Введите год рождения!"<<std::endl;
std::cin>>year;
std::cout <<year<<std::endl;
 
file.open("anket.txt", std::ios::out | std::ios::app); // открытие файла
 
if (file.is_open()){
    std::cout << "file is open" <<std::endl; //проверка
    file<<familya<<";"<<imya<<";"<<otch<<";"<<year<<";";///запись в файл
    file.close(); //закрытиe файла
    system ("pause");}
break;
 
}
std::cin.ignore(255, '\n').get();
system ("pause");
}
если дописать case 2 ...... default: то происходит ошибка.

В общем кто чем поможет заранее спасибо!

З.Ы. если вопрос показался глупым - прошу тапками не кидать, только начал разбираться с сишкой.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.07.2011, 20:28     Отследить ввод с клавиатуры...
Посмотрите здесь:

Как отследить ввод символа в программу - C++
Программа расчета площади поверхности и объема сферы,требуется ввод радиуса.что делать,если пользователь введет букву или ,например,...

Ввод с клавиатуры - C++
на С++ надо организовать ввод с клавиатуры, при этом я не знаю сколько элементов будет вводится, записывать их в массив. Тоесть когда я...

Ввод с клавиатуры - C++
Напишите программу, которая будет читать целое число от ввода с клавиатуры и печатать последнюю цифру данного числа. (8. Write a program...

Ввод с клавиатуры - C++
Помогите пожалуйста переделать программу, чтобы значения n - вводилось с клавиатуры и определяло количество елементов Х и У( по...

Ввод с клавиатуры - C++
Столкнулся с проблемой, что не получается переделать считывание текста из файла на ввод с клавиатуры. Помогите пожалуйста. #include...

С++ ввод с клавиатуры и поиск - C++
Вот само задание: *По варианту : Описать структуру с именем MARSH, содержащую следующие поля: * название начального пункта маршрута; ...

Ввод симфола с клавиатуры - C++
Здравствуйте. Очень интересует вопрос как можно вводить символы с клавиатуры. Речь идёт о калькуляторе. Пример символов: +, -,*,\,...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rrrFer
Заблокирован
25.07.2011, 20:48     Отследить ввод с клавиатуры... #2
Цитата Сообщение от popoff17 Посмотреть сообщение
запретить ввод символов и цыфр, только буквы...
буквы не считаются символами?
"юзать getch()" но как его использовать ни примеров, ни объяснений я не смог найти.
плохо искали. Ниже цитата из справочника, который есть в электронном виде и скоро будет распечатан на каждом заборе:
getch Вводит символ с клавиатуры без эхо-отображения
на экране
-----------------------------------------------------------------

Назначение Водит символ с клавиатуры без эхо-отображения
на экране.

Синтаксис #include<conio.h>
int getch(void);

╔═══════╤══════╤═════════╤════════╤═════════╗
║ DOS │ UNIX │ Windows │ ANSI C │ C++ only║
╟───────┼──────┼─────────┼────────┼─────────╢
║ * │ │ │ │ ║
╚═══════╧══════╧═════════╧════════╧═════════╝

Замечания Функция getch cчитывает один символ
непосредственно с клавиатуры без
эхо-отображения его на экране.

Возвращаемое getch возвращает считанный с клавиатуры символ.
значение

Смотри также cgets, cscanf, fgetc, getc, getchar, getche,
getpass, kbhit, putch, ungetch

Пример

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 #include <conio.h>
       #include <stdio.h>
 
       int main(void)
       {
          int c;
          int extended = 0;
          c = getch();
          if (!c)
             extended = getch();
          if (extended)
             printf("Символ является расширенным\n");
          else
             printf("Символ является нерасширенным\n");
 
          return 0;
       }
однако, в справочнике есть пример? В гугле/яндексе/.../... примеров нету?
Kastaneda
Форумчанин
Эксперт С++
4511 / 2853 / 227
Регистрация: 12.12.2009
Сообщений: 7,249
Записей в блоге: 1
Завершенные тесты: 1
25.07.2011, 20:53     Отследить ввод с клавиатуры... #3
Цитата Сообщение от popoff17 Посмотреть сообщение
но хотелось бы прямо во время нажатия на клавишу блокировать ненужные символы (знаки и цифры).
Можно читать буфер консоли и полностью контролировать ввод, на форуме полно подобных примеров.
popoff17
10 / 10 / 2
Регистрация: 13.07.2010
Сообщений: 206
25.07.2011, 20:56  [ТС]     Отследить ввод с клавиатуры... #4
Цитата Сообщение от rrrFer Посмотреть сообщение
Возвращаемое getch возвращает считанный с клавиатуры символ.
значение
вот об этом писал, что вывести на экран код символа получилось.
на работе код есть, завтра покажу.

работа того кода выглядит так: ввожу любой символ - на экране отображается его код.
а вот как сделать так, чтобы, если код введенного символа равен цифре или знаку то вывода вообще не было? вот в чем вопрос
или я что-то не так понял?

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
int main(){
 
int n, i, m;
    m=5;
for (i=1; i<=6; i+1){
n = getch();                                    
cout << n;                                      
}
system ("pause");
}
вот код, который считывает код символа при вводе... что можно дальше сделать?
rrrFer
Заблокирован
25.07.2011, 20:57     Отследить ввод с клавиатуры... #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <conio.h>
 
int main( ) {
    char    c;
    
    for( ; ; ) {
        c = getch( );
        if( c == 13 )
            break;
        if( c > '0' && c < '9' )
            continue;
        putch( c );
    }
    
    return  0;
}
разбирайтесь
popoff17
10 / 10 / 2
Регистрация: 13.07.2010
Сообщений: 206
25.07.2011, 20:58  [ТС]     Отследить ввод с клавиатуры... #6
Цитата Сообщение от Kastaneda Посмотреть сообщение
Можно читать буфер консоли и полностью контролировать ввод, на форуме полно подобных примеров.
а можно как-то попопулярнее, для "особо понятливых"?
мне иначе до сути не докопаться =\
ValeryS
Модератор
6550 / 5016 / 463
Регистрация: 14.02.2011
Сообщений: 16,729
25.07.2011, 21:04     Отследить ввод с клавиатуры... #7
Цитата Сообщение от popoff17 Посмотреть сообщение
n = getch();
cout << n;
ну дак проверяй
например так
C++
1
2
3
n = getch(); 
 if(n>='A') // если буква 
 cout << n;  // то выводим
Добавлено через 2 минуты
Цитата Сообщение от popoff17 Посмотреть сообщение
or (i=1; i<=6; i+1){
как ты думаешь цикл завершится???
i не изменяется
или так
i++;
или так
i=i+1
i+=1
++i
LosAngeles
Заблокирован
25.07.2011, 21:16     Отследить ввод с клавиатуры... #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void scan(char* var, bool (*pred)(char) ) //Сюда вместо pred пожеланию isalpha или ещё что-то засунуть можно
{
    char buff;
    size_t i = 0;
    while (buff = getch())
    {
        if (buff == 0xD)
           bbreak;
        if (pred(buff))
        {
           var[i] = buff;
           putch(buff);
           ++i;
        }
    }
}
за правильность не ручаюсь, писал здесь, но общая суть ясна я надеюсь.

Добавлено через 3 минуты
вобщем получилась функция, которая считывает только буквы(или чтото другое в зависимости от фантазии) не отображая всё остальное до энтера.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.07.2011, 05:21     Отследить ввод с клавиатуры...
Еще ссылки по теме:

Ввод функции с клавиатуры - C++
Здравствуйте. Необходима помощь в написании программы на С. Программа поиска минимума и максимума функции методом кого-то. С методом может...

Ввод данных с клавиатуры - C++
Помогите, пожалуйста... Если я напишу так:cin &gt;&gt; a; То у меня введутся символы с клавиатуры, а потом каретка автоматически переходит на...

Палиндром ввод с клавиатуры - C++
Доброго времени суток:) Напишите программу,которая читает пятизначные целые и определяет,являются ли они палиндромами(пример палиндрома...

Ввод матрицы с клавиатуры - C++
С одномерными я разобрался. Теперь надо двумерные понять.

Не выполняется ввод с клавиатуры - C++
#include &lt;iostream&gt; using namespace std; void main() { int d; cin&gt;&gt;d; cout&lt;&lt;d&lt;&lt;endl;


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

Или воспользуйтесь поиском по форуму:
popoff17
10 / 10 / 2
Регистрация: 13.07.2010
Сообщений: 206
26.07.2011, 05:21  [ТС]     Отследить ввод с клавиатуры... #9
Ребята, спасибо всем!
если честно, то мало что понял (пока что трудновато разобраться), но хоть что-то прояснил для себя, буду пытаться.
Сейчас, с вашей помощью, при нажатии выводятся только коды букв. буду пытаться дальше. Думаю мучить вас глупыми вопросами больше не стоит, надо самому стараться больше.
Еще раз спасибо!
Yandex
Объявления
26.07.2011, 05:21     Отследить ввод с клавиатуры...
Ответ Создать тему
Опции темы

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