Consider below simple program in C. The program reads an integer using scanf(), then reads a string using fgets().
x = 10, str =
The problem with above code is scanf() reads an integer and leaves a newline character in buffer. So fgets() only reads newline and the string “test” is ignored by the program.
The similar problem occurs when scanf() is used in a loop.
a b q
......Enter q to quit...... Enter a character a Enter a character Enter a character b Enter a character Enter a character q
We can notice that above program prints an extra “Enter a character” followed by an extra new line. This happens because every scanf() leaves a newline character in buffer that is read by next scanf.
How to solve above problem?
- We can make scanf() to read a new line by using an extra “ ”, i.e., scanf(“%d ”, &x) . In fact scanf(“%d “, &x) also works (Note extra space).
- We can add a getchar() after scanf() to read an extra newline.