It's due to the way getchar() and console input work. When you enter "abcdCTRL+D" on the keyboard, here's what happens:
- abcd characters are added to the stdin buffer and consumed by getchar()
- CTRL+D (or EOF on Unix, CTRL+Z on Windows) is left in the input buffer (it's not yet consumed by getchar()!))
- The console is waiting for more input, and the next time you press ENTER or CTRL+D the previous one will be consumed by getchar()
Think about this scenario: What happens if you only enter "abcd" and not press anything else? The program will still be waiting for more input. It needs to receive a signal telling it to stop with the input and proceed with the code execution. But if you press enter, it won't automatically add a new line to the string, because the new line character is still in the input buffer.