Реализация кольцевого буфера / круговой матрицы в C - PullRequest
0 голосов
/ 25 сентября 2018

Существует множество предыдущих постов и примеров для реализации кольцевого буфера в C, но многие из них включают структуры, и это слишком сложно для задачи, которую я пытаюсь выполнить.

Задача относительно проста - распечатать последние 10 команд, введенных пользователем, аналогично функции bash history.Мой код ниже:

void make_history(char **entry) {
    static char past_entries[10][10];

    static int index = 0;
    int sz = sizeof(past_entries)/sizeof(past_entries[0]);

    if(strcmp(entry, "history") != 0) {
        strcpy(past_entries[index], *entry);
        index = (index + 1) % sz;
    }

    for(int i = 0; i < sz; i++) {
        printf("%d. %s", i+1, past_entries[i % sz]);
    }
}

У меня есть две основные проблемы для этой реализации.Во-первых, история выдаст значения до 10, даже если пользователь ввел менее 10 команд - что, вероятно, можно исправить с помощью цикла for.

Вторая проблема заключается в том, что хотябуфер достигнет значения 10 и не обновит самую последнюю команду ввода.Опять же, эта проблема, вероятно, решается из цикла for, который может указывать на разные начальные точки.

Спасибо за любую помощь.Я могу предоставить более подробную информацию, если это необходимо.

...