Как очистить входной буфер после переполнения 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 4

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, используя ввод символов.

while ((c=getchar()) != '\n' && c != EOF)
    ;

Или:

scanf("%*[^\n]%*c");