Проблема с TUI меню
Меню принимает более одного символа, т. е. при вводе «hrhrhrhr» вызывается функция, которая должна быть вызвана вводом «h» и т. д. По-факту же необходимо, чтобы при вводе отличном от заданного, выдавалась ошибка и снова предлагался ввод. Объяснил коряво, но не имею представления, как сформулировать корректно. Вот нехитрый код:
#include <libintl.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main()
{
char option;
bool isRunning = true;
while(isRunning == true)
{
printf("\nCapere actio: ");
fflush(stdin);
option = getchar();
switch(option)
{
case 'h':
printf("Actionis:\n");
help();
break;
case 'c':
create();
break;
case 'l':
printf("Index numerorum:\n\n");
list();
break;
case 'q':
printf("Exitus\n");
isRunning = false;
break;
default:
printf("Actio invalidum!\n");
break;
}
}
return 0;
}
Ответы (1 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
get_action()
читает строку. Если строка из одного символа, она возвращает этот символ. Если строка пустая или слишком длинная, она возвращает -2
. Если ошибка ввода из stdin
, она возвращает -1
:
int get_action()
{
int option = getchar();
if (option == EOF)
{
return -1;
}
if (option == '\n')
{
return -2;
}
int count = 0;
while (true)
{
int c = getchar();
if (c == EOF)
{
return -1;
}
if (c == '\n')
{
break;
}
++count;
}
if (count == 0)
{
return option;
}
return -2;
}