Существует множество предыдущих постов и примеров для реализации кольцевого буфера в 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
, который может указывать на разные начальные точки.
Спасибо за любую помощь.Я могу предоставить более подробную информацию, если это необходимо.