#cpp
Приветствую. Хочу сделать возможность редактирование переменной, но не нашел функции для добавления текста уже имеющегося значения в строку ввода консоли, для его редактирования. Не подскажете функцию? P.S Вопрос глупый, но гугл ничего не выдает из-за засилия других глупых вопросов.
Ответы
Ответ 1
Вот (довольно искусственный) пример использования GNU readline на Си (также компилируется и g++) (а вот ссылка на нее для windows) Программа анализирует прочитанную строку и если в ней есть слово, начинающееся с V:, то оно подставляется для ввода следующей строки. #include#include #include #include static char *ins; int f() { if (ins && ins[0]) { rl_insert_text(ins); rl_redisplay(); } } int main (int ac, char *av[]) { char *line = 0, txt[1000] = "", *p; rl_pre_input_hook = f; // readline() вызовет нашу функцию перед чтением ввода (после вывода промпта) rl_bind_key('\t', rl_insert); // для вставки символа табуляции (иначе он работает как поиск дополнения имени файла) ins = txt; while (line = readline("> ")) { printf("line: %s\n", *line ? line : ""); txt[0] = 0; if (p = strstr(line, "V:")) sscanf(p, "%s", txt); if (line[0]) add_history(line); free(line); } return puts("End") == EOF; } Поскольку вложенные функции не поддерживаются в С++ функцию f() (readline hook) и массив char txt[] (или указатель на него, как в этом примере) приходится выносить на внешний уровень. Пример вызова: avp@avp-ubu1:hashcode$ g++ t-readline.c -lreadline avp@avp-ubu1:hashcode$ ./a.out > ksdkk line: ksdkk > ueru V:444 line: ueru V:444 > V:444 kksk line: V:444 kksk > End В строке 5 (третий вызов readline) текст V:444 в начале области ввода подставлен из предыдущей введенной строки. Ответ 2
Поскольку система не указана, отвечаю для Linux. Системный вызов ioctl с запросом номер TIOCSTI помещает один байт в очередь ввода терминала или последовательного порта. Пример использования: #include... for(const char*s="моя строка"; *s; s++) ioctl(0, TIOCSTI, s); Источник В Windows для имитации ввода с клавиатуры можно использовать функцию WriteConsoleInput.
Комментариев нет:
Отправить комментарий