Question

i have some code that run repetedly :

printf("do you want to continue? Y/N: \n");
keepplaying = getchar();

in the next my code is running it doesnt wait for input. i found out that getchar in the seconed time use '\n' as the charcter. im gussing this is due to some buffer the sdio has, so it save the last input which was "Y\n" or "N\n".

my Q is, how do i flush the buffer before using the getchar, which will make getchar wait for my answer?

Was it helpful?

Solution

Flushing an input stream causes undefined behaviour.

int fflush(FILE *ostream);

ostream points to an output stream or an update stream in which the most recent operation was not input, the fflush function causes any unwritten data for that stream to be delivered to the host environment to be written to the file; otherwise, the behavior is undefined.

To properly flush the input stream do something like the following:

int main(void)
{
  int   ch;
  char  buf[BUFSIZ];

  puts("Flushing input");

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

  printf ("Enter some text: ");

  if (fgets(buf, sizeof(buf), stdin))
  {
    printf ("You entered: %s", buf);
  }

  return 0;
}

See Why fflush(stdin) is wrong and Flush the input buffer.

OTHER TIPS

use fflush() and flushall() before printf

As far as I know, flushall is not POSIX. In order to flush a console buffer in a standard way, you can simply use the command:

fflush(NULL);

This topic seems to be a bit old but I hope this can still help the others.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top