Как можно проверить каждый символ ввода с клавиатуры не применяя функцию getch() из conio.h?

Как можно ограничить ввод ненужных символов от пользователя? В данном случае мне нужно чтобы вводились только 0 и 1, а другие символы игнорировались. Как это реализовать в Си. Есть функция getch(), но как я выяснил она не стандартизована и хотелось бы ее не использовать. Визуально хотел, чтобы получилось нечто подобное.

#include<stdio.h>
#include<ctype.h>

int main(void)
{
    char mask = 0;
    system("chcp 1251>0");
    puts("Введите маску-пароль для шифрования в формате bxxxxxxxx,\n\
где x - 0 или 1. Например: b10011100\n");
          putch('b');
    char chrTemp;
    for (int i = 7; i >=0; i--)
        {
            while (!(((chrTemp = getch()) == '0') ^ (chrTemp == '1')))
                ;
            putchar(chrTemp);
            if (chrTemp == '1')
            {
                chrTemp = 1<<i;
                mask |=chrTemp;
            }
        }
    
    return 0;
}

Можно конечно считать все данные пользователя, потом их обработать, затем если неправильно - вывести сообщение, что ввод не корректный и попросить заново ввести. Но так задача не стоит!

Как-то реализовано же ввод цифр без букв в приложениях. Гуглил как можно реализовать. Как понимаю всё уходив в какой-то небуферизированный ввод вывод. https://ru.stackoverflow.com/questions/1385825/Какой-функцией-заменить-getch-для-linux

Функции getc() и getchar() не дают сделать подобной реализации. Они сразу печатают символы пока не нажмешь \n.


Ответы (0 шт):