Я сделал простую программу на C, которая демонстрирует проблему. Вот.OS X перемещение терминала с клавишами со стрелками
#include <stdio.h>
int main(int argc, const char * argv[]) {
char buffer[128];
memset(buffer, 0, sizeof(buffer));
printf("Type data:\n");
scanf("%126s", buffer);
printf("%s\n", buffer);
getchar();
return 0;
}
Проблема заключается в том, что, когда приложение ожидает ввода пользователя с зсапЕ() и пользователь пользователь хочет изменить линию он напечатанный, и сделать перемещение каретки со стрелками, каретка не движется, но новый некрасиво вход вставляется.
По какой-то причине он не обрабатывает ключи так, как я ожидаю. Я также не могу перейти к предыдущей типизированной строке с ключом вверх.
Очевидно, что я должен сознательно включить это поведение. Могли бы вы посоветоваться, как я могу это сделать?
Возможно, вам понадобится использовать библиотеку ncurses (или ее эквивалент на OS X), чтобы иметь возможность использовать тип терминального ввода-вывода, о котором вы говорили. Стандартные функции ввода/вывода C связаны с потоком символов, поэтому они не обрабатывают символы эвакуации, отправленные терминалами. –
Я думал о такой библиотеке, но не должен ли терминал обрабатывать это сам? Многие приложения допускают такую манипуляцию, и кажется странным, что все они используют нестандартные библиотеки. – Ivan
Все они используют нестандартные библиотеки, потому что нет стандартной библиотеки для использования. –