У меня проблема в том, что если пользователь вводит значение, превышающее максимальное количество символов, такое как «abcdefg», когда максимальное значение равно 5, fgets()
, который находится внутри цикла, выполняется дважды, а вместо «abcd» его вместо этого печатает «abcd», затем «efg».
Я думаю, это потому, что fgets()
обрабатывает только до 4 символов и нулевого терминатора, но в буфере stdin все еще есть "efg".
Мне было интересно, есть ли способ только захватить "abcd" и отбросить оставшуюся часть любого оставшегося ввода, превышающего максимальный размер выделенного буфера.
#define INPUT_MAX 5
int main(int argc, char* argv[]){
char input[INPUT_MAX];
while(1){
printf("prompt> ");
fgets(input, INPUT_MAX, stdin);
printf("\n%s\n", input);
}
}
Пример RUN:
prompt> abcdefg <-- I press enter once here for /n
abcd
prompt>
efg
prompt> . <-- I end up here after enter command
Я обнаружил, что fflush(stdin)
не является правильным способом очистки стандартного ввода.