问题
I'm prompting the user to enter the length of an array, initializing a char[] array with this input, and then prompting the user to type a message to enter into the char[] array.
I'm reading the first character of the user's message with getchar()
.
However, getchar()
is reading the new-line escape '\n'
before it is reading any user input. It seems to be getting '\n'
from the previous printf
statement that prompts the user...
Here is the relevant code:
#include <stdio.h>
int main(void) {
int len = 0,
originalLen = 0;
printf("\n\nWhat is the length of the array? ");
scanf("%d", &originalLen);
char str[originalLen]; // intitializing the array
printf("Enter a message to enter into the array: ");
char target = getchar();
str[len] = target;
// why is getchar() reading '\n'?
if (target == '\n') {
printf("\n...what happened?\n");
}
return 0;
} // end of main
回答1:
When you enter the number and hit the ENTER key, a number and a character are placed in the input buffer, they are namely:
- The entered number and
- The newline character(
\n
).
The number gets consumed by the scanf
but the newline remains in the input buffer, which is read by getchar()
.
You need to consume the \n
before calling getchar()
by using:
scanf("%d ", &originalLen);
^^^
This tells scanf
to read the number and an additional character, which is \n
.
回答2:
It's because the previous scanf
does not read the newline after the number.
This can be solved two ways:
- Use e.g.
getchar
to read it - Add a space after the
scanf
format (e.g.scanf("%d ", ...)
)
回答3:
You can use getchar
in a loop to flush out stdin before reading the next character.
while((target = getchar()) != '\n' && target != EOF)
来源:https://stackoverflow.com/questions/14765226/why-is-getchar-reading-n-after-a-printf-statement