LINUX.ORG.RU

For output streams, fflush() forces a write of all user-space buffered data for the given output or update stream via the stream's underlying write function. For input streams, fflush() discards any buffered data that has been fetched from the underlying file, but has not been by the application. The open status of the stream is unaffected.

madcore ★★★★★ ()
Ответ на: комментарий от madcore
dis@localhost:~/progs$ cat test.c
#include <stdio.h>

int main(void)
{
  char buf[10];
  int i=5;
  while(i)
    {
      fgets(buf, 9, stdin);
      fflush(stdin);
      printf("%s\n", buf);
      i--;
    }
  return 0;
}

dis@localhost:~/progs$ ./test
123456789012345678901234567890
12345678
90123456
78901234
567890
Lorchanko ()
Ответ на: комментарий от true_admin

Каким образом? Я не знаю заранее какой размер введет пользователь. Я хотел считать через getchar(), но там та же ситуация. Может есть способ проверить буфер на пустоту?

Lorchanko ()
fgets(buf, sizeof(buf-1), stdin);
      size_t i;
      char tmp = '0';

      for(i=0; i < sizeof(buf); i++)
	{
	  if(buf[i] == '\n')
	    {
	      tmp = '1';
	      break;
	    }
	}
      if(tmp != '1')
	{
	  while(tmp != '\n') tmp = getchar();
	}

Свелосипедил вот так, благо fgets() записывает '\n' в строку, но хотелось бы покрасивее как-нибудь...

Lorchanko ()

tcflush(STDIN_FILENO, TCIFLUSH);

arsi ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.