main
unknown
plain_text
12 days ago
1.6 kB
3
Indexable
#include "type.h" bool lerLinha(char *cmd, char *arg) { char line[LINE_SIZE] = {0}; printf("\n> "); if (fgets(line, LINE_SIZE, stdin) == NULL) { return false; } // remove newline line[strcspn(line, "\n")] = '\0'; int num_args = sscanf(line, "%c %s", cmd, arg); if (num_args == 0) { return false; } if (num_args == 1) { arg[0] = '\0'; // limpa arg se só houver comando } return true; } bool executarComando(COMANDO comandos[], char cmd, char *arg, ESTADO *estado) { for (int i = 0; comandos[i] != NULL; i++) { bool resultado; if (arg[0] != '\0') { resultado = comandos[i](cmd, arg, estado); } else { resultado = comandos[i](cmd, NULL, estado); } if (resultado) { return true; } } return false; } int main() { COMANDO comandos[] = {sair, ler, /*gravar,*/ riscar, desfazer, branco,NULL}; ESTADO estado; estado.looping = true; estado.tabuleiro = NULL; estado.historico = NULL; char cmd = 0; char arg[LINE_SIZE] = {0}; while (estado.looping) { bool leu = lerLinha(&cmd, arg); if (!leu) { estado.looping = false; } else { bool executado = executarComando(comandos, cmd, arg, &estado); if (!executado && cmd != '\0') { fprintf(stderr, "Erro: Comando %c inválido!\n", cmd); } } } libertarMemoria(&estado); libertarHistorico(&estado); return 0; }
Editor is loading...
Leave a Comment