Search code examples
cstringgccnewlinefgets

Removing trailing newline character from fgets() input


I am trying to get some data from the user and send it to another function in gcc. The code is something like this.

printf("Enter your Name: ");
if (!(fgets(Name, sizeof Name, stdin) != NULL)) {
    fprintf(stderr, "Error reading Name.\n");
    exit(1);
}

However, I find that it has a newline \n character in the end. So if I enter John it ends up sending John\n. How do I remove that \n and send a proper string.


Solution

  • The elegant way:

    Name[strcspn(Name, "\n")] = 0;
    

    The slightly ugly way:

    char *pos;
    if ((pos=strchr(Name, '\n')) != NULL)
        *pos = '\0';
    else
        /* input too long for buffer, flag error */
    

    The slightly strange way:

    strtok(Name, "\n");
    

    Note that the strtok function doesn't work as expected if the user enters an empty string (i.e. presses only Enter). It leaves the \n character intact.

    There are others as well, of course.