Сделайте ввод восстановить прежний при нажатии стрелки вверх вместо ^ [[A в C - PullRequest
1 голос
/ 29 сентября 2019

как я могу заставить программу ожидать клавишу со стрелкой UP и поместить предыдущее введенное значение в текущее?

код:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


int main(int argc, char* argv[]);

void parse(char* command){

    if(!strcmp(command,"exit")){
        exit(1);
    }

    main(0,NULL);
}

int main(int argc, char* argv[]){
    char buffer[1024]; 

    printf("command > ");
    fgets(buffer , sizeof(buffer) , stdin);

    buffer[strlen(buffer) - 1] = 0;

    parse(buffer);

}

снимок экрана

1 Ответ

5 голосов
/ 29 сентября 2019

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

Также обратите внимание, что ваша программа должна зацикливаться навместо рекурсивных вызовов между main и parse.

   // This is prog.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <readline/readline.h>
#include <readline/history.h>

void parse(char* command){
    if(!strcmp(command,"exit")){
        exit(1);
    }
}

int main (int argc, char* argv[]){
    char *buffer;

    while ((buffer = readline("command >")) != NULL) {
        add_history(buffer);
        parse(buffer);
        free(buffer);
    }
    return 0;
}

Вам придется строить с readline:

cc prog.c -lreadline

Для получения дополнительной информации о readline см.это link

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...