Как очистить входной буфер после переполнения fgets?
Я сталкиваюсь с небольшой проблемой с fgets, когда входная строка превышает заданный предел.
Возьмем пример ниже:
for(index = 0; index < max; index++)
{printf(" Enter the %d string : ",index+1)
if(fgets(input,MAXLEN,stdin))
{
printf(" The string and size of the string is %s and %d n",input,strlen(input) + 1);
removeNewLine(input);
if(strcmp(input,"end") != 0)
{ //Do something with input
}
}
Теперь, когда я превышаю длину MAXLEN и ввожу строку, я знаю, что входные данные добавят '' в MAXLEN -1, и это будет все. Проблема возникает, когда я пытаюсь ввести 2-ю строку, которая не запрашивается, т. е.
Output :
Enter the first string : Aaaaaaaaaaaaaaaaaaaa //Exceeds limit
Enter the second string : Enter the third string : ....Waits input
Итак, я подумал, что должен очистить буфер стандартным способом, как в C. Он ждет, пока я не войду
return
Два раза, первый раз, когда он добавляется к строке и в следующий раз, ожидая больше ввода с другим возвращением. 1. Существует ли какой-либо метод, с помощью которого я могу очистить буфер без ввода дополнительного возврата? 2. Как я могу реализовать обработку ошибок для того же самого? Поскольку возвращаемое значение fgets будет ненулевым, а strlen (input) дает мне принятый размер строки fgets, что следует делать?
Большое Спасибо
2 ответа:
Если я правильно понял, похоже, вы хотите избежать двойного нажатия enter, когда введенный ввод находится в пределах диапазона.
Обходной путь будет
for(index = 0; index < max; index++) { printf(" Enter the %d th string :",index); // if (strlen(input) >=MAXLEN ) if(fgets(input,MAXLEN,stdin)) { removeNewLine(input); if(strcmp(input,"end") != 0) // Do something with input ; } if (strlen(input) == MAXLEN-1 ) while((ch = getchar())!='\n' && ch != EOF ); }
С ограничением, что он снова попросит ввести два раза, когда введенные символы будут точно MAXLEN-2.
Или же вы можете просто сформировать свой
input
, используя ввод символов.