Как игнорировать клавиши со стрелками в C чтения из стандартного ввода? - PullRequest
2 голосов
/ 22 мая 2009

Я читаю со стандартного ввода, используя системный вызов read (), но есть кое-что, что беспокоит меня. Я не могу использовать клавиши со стрелками ... То, что я действительно хотел сделать, это использовать клавиши со стрелками для перемещения вперед и назад в набранном тексте, но я думаю, что это не так просто ... Итак, что я по крайней мере хочу сделать , это игнорировать их.

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

Этого легко достичь или не так просто?

Ответы [ 2 ]

4 голосов
/ 22 мая 2009

Чтобы интерпретировать клавиши со стрелками так, как вам хотелось бы (то есть перемещаться вперед и назад и редактировать ввод), вам, как правило, нужно использовать библиотеку. Для Linux стандартом является GNU Readline . Надеюсь, кто-то другой скажет, что вы обычно используете для приложения Windows CLI.

0 голосов
/ 23 мая 2009

Ответ в конечном итоге зависит от того, откуда взялись ключи. Я запустил эту программу под Cygwin:

int main(void)
{
    int c=0;

    while( c != 'X' ) {
        c = getchar();
        printf("\nc=%d", c);
    }
}

Каждый раз, когда появляется курсор, я вижу escape (27), квадратную скобку и еще один символ. Так что, если вы получаете такие результаты, вы можете пропустить 3 клавиши каждый раз, когда видите 27. Вы также можете посмотреть на них и использовать их!

Как уже упоминалось, YMMV, особенно для O.S., и фактическая функция получения ключа, которую вы вызываете.

...