Search code examples
cnewlineprintfgetchar

Why is getchar() reading '\n' after a printf statement?



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



Solution

  • 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.