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

Очередной запрет ввода - C++

Восстановить пароль Регистрация
 
Bredorub
4 / 4 / 0
Регистрация: 16.01.2011
Сообщений: 90
25.02.2011, 07:36     Очередной запрет ввода #1
Можно ли сделать так, чтобы при вводе (cin) программа никак не реагировала на нажатие кнопок? Например игнорировала определенные символы или не реагировала на бэкспэйс.

P.S: С getche() в этом плане уже немного разобрался - ненужные символы легко затираются пробелами в условных операторах, хотя мне кажется что это не совсем рационально.

Добавлено через 18 часов 45 минут
Чтото все молчат... Нельзя, стало быть? Неужели единственный выход - писать свою версию cin'а, без бэкспэйса?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.02.2011, 07:36     Очередной запрет ввода
Посмотрите здесь:

C++ Запрет ввода числа с точкой
C++ Запрет ввода русских букв....
C++ Запрет ввода символов в поле Edit
C++ Запрет ввода символов в консоли
Запрет ввода букв C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
25.02.2011, 14:43     Очередной запрет ввода #2
Стандартных средств для этого нет. Как это сделать зависит от используемой операционной системы.
Bredorub
4 / 4 / 0
Регистрация: 16.01.2011
Сообщений: 90
25.02.2011, 16:32  [ТС]     Очередной запрет ввода #3
Цитата Сообщение от rangerx Посмотреть сообщение
Стандартных средств для этого нет. Как это сделать зависит от используемой операционной системы.
А пример можете привести? Допустим, в одну програму пишем в хр, другую в freebsd. В чем конкретно будут заключаться различия в реализации? Можно ли предусмотреть кроссплатформенность и в зависимости от используемой операционной системы программно избрать тот или иной способ?
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
25.02.2011, 17:04     Очередной запрет ввода #4
Через WinAPI могу пример показать, но естественно ни о какой кроссплатформенности речи идти не может.

Добавлено через 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
#include <iostream> 
#include <windows.h>
using namespace std;
const int C=20;
int main() {
 HANDLE hstd=GetStdHandle(STD_INPUT_HANDLE);
 INPUT_RECORD IR[C];
 DWORD read;
 while(PeekConsoleInputA(hstd,IR,c,&read)){
         bool F=false;
         for(int i=0;i<read;i++){
         if(IR[i].EventType==KEY_EVENT) && IR[i].Event.KeyEvent.wVirtualKeyCode==VK_SPACE){
                 cout<<endl<<"You press space"<<endl;
                 system("pause");
                 F=true;
                 break;}
         }
         if(F)break;
         cout<<"Press any key..."<<endl;
         Sleep(1000);
 }
 return 0;
}
Низкоуровневая ф-ции консольного ввода, считывает нажатую клавишу из буфера консоли (без эха), в твоем случае можно проверять была ли нажата клавиша бэкспэйс и игнорировать ее, если нажата другая клавиша, то "пропускать" ее дальше.
Yandex
Объявления
25.02.2011, 17:04     Очередной запрет ввода
Ответ Создать тему
Опции темы

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