Я кодирую интерактивную игру судоку и анализирую команды с консоли.
Я хочу ограничить пользовательские команды до 256 символов, в то время как любой дополнительный символ напечатает сообщение об ошибке и сообщит ему, что оно превышает максимальную длину.
, поэтому я выделил память для массива char длиной 256 и прочитал этот ввод с помощью функции fgets, а затем передал его функции парсера, вот мой код для этой части - Примечание что вход - это вход, который я передал от fgets fun c.
Command parseCommand(char *input, int upperBound, MODE* mode){
Command command;
char* token;
char *copyInput = (char*) malloc(strlen(input)*sizeof(char));
if(copyInput == NULL){
printf("Error: parseCommand has failed\n");
free(copyInput);
exit(EXIT_FAILURE);
}
command.cmd = ERROR;
strcpy(copyInput,input);
token = strtok(input,delim);
if(strlen(copyInput) > 256){
command.cmd = MAX_ARGS_REACHED;
clear();
}...//More code following to that but irrelvant
Теперь я считаю, что проблема в моей чистой функции, потому что там ничего не происходит, и она никогда не покидает ее, но если Я нажимаю Enter Twich, тогда это 258 символов, он работает отлично, например, каждый вход размером больше 257 работает отлично, только проблема с 257.
void clear(){
int c = 0;
while ((c = getchar()) != '\n' && c != EOF) { }
}
Надеюсь получить помощь здесь спасибо!
edit - вот код, показывающий, как я читаю ввод и передаю его функции выше -
void runGame(){
Game* game;
char* input = (char*) malloc(256 * sizeof(char));
if(input == NULL){
printf("Error: Program has failed!\n");
free(input);
exit(EXIT_FAILURE);
}
printf("Welcome to Sudoku Game!\n");
game = createGame();
while(1){
Command command;
printf("Please enter a Command\n");
if(!fgets(input,ARRSIZE,stdin)){/*checks if reading user input failed or EOF*/
exitCommand(game);
free(input);
return;
}
command = parseCommand(input,game->rows,&game->mode);//More code following to that