Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Римские цифры - как сделать фильтрацию ввода


Автор: KorroK 23.12.2008, 00:38
Требуется сделать так, чтобы можно было ввести только римские цифры.
Есть идея сделать посимвольный ввод с проверкой, вроде

char r;
do 
{    r = _getch();
    if (r == 'X' ||
        r == 'V' ||
        r == 'I')
// и т.д.    

{    std::cout << r;
    }
} while(r != 13);

Споткнулся на том, как:
- веденые символы сливать в одну строку 
- если вводится в нижнем регистре  переводить в верхний
- как задействовать редактирование при вводе (Back Spaсe, например) 

Автор: Dmi3ev 23.12.2008, 00:53
Код

string s;
char r;
do
{r=toupper(getch());
 if (r == 'X' ||
     r == 'V' ||
     r == 'I')
// è ò.ä.

{    std::cout << r; s+=r;
    }
} while(r != 13);
cout<<endl<<"s="<<s;

вот так можно

Автор: KorroK 23.12.2008, 01:34
Спасибо, получилось
А редактировать строку ввода ка-то можно?

Автор: Dmi3ev 23.12.2008, 01:42
KorroK, ну ты сам смотри, ты нажимаешь enter для подтверждения ввода, как тут отредактируешь, редактировать можно пока enter не нажал, а так потом уже после ввода можно сделать редактирование... а так сам посуди... переменная уже десять раз изменилась, записалась в строку, а ты ее менять собрался... 
как ты это представляешь???
объясни????

Автор: KorroK 23.12.2008, 01:48
да, пожалуй, в консоли никак
чет я туплю )

Автор: Dmi3ev 23.12.2008, 01:53
да нет, можно везде сделать что угодно...
только нужна идея...
я допустим не представляю...
а ты, может, видишь ясно как это делать... только не знаешь как реализовать...
но видно ты тоже не видишь... так что редактируй дальше в проге... вот выход...

Автор: SkyCoder 24.12.2008, 15:10
Когда только учился, я на подобное заморачивался.  Редактирование самостоятельно делается без проблемм, если делать на потоках с помощью getch и getchar. Иной вариант изучи  printf() scanf().
Если делаешь с помощью гетчар и и гетчш смотри.

гетчар и гетчш читают ОДИН символ из потока ввода программы.Знал.

Каждая клавиша имеет свой код который отсылается в поток ввода программы. Знаешь.

Функциональные клавиши и русские буквы отсылаются в поток ввода двумя символами. нулём(не путать с символом '0'==48) и собственно кодом. Знаешь.

Что бы узнать коды клавиш, напиши софтину, которая выводила бы поток ввода, посимвольно, при том сам символ и его код.

Пишешь обработчик вводимых символов - по коду определяешь что было нажато, производишь необходимые действия над вводимой строкой(переменной) и выводишь это действие на консоль(т.е. для тебя в поток вывода). 

Запомнился пример - что бы стереть один символ из консоли выводишь строку "\b \b" (бэкспейс, пробел,бэкспейс)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)