为什么在打印多个字符串(%s)时printf()会留下换行符,并且该如何解决?

hit*_*ter 5 c arrays string printf

我制作了一个接受字符串(名字/姓氏)的程序,但是我不是
3岁的Phil Snowken 的典型输出,而是3 岁的
Phil
Snowken

#include <stdio.h>
#define N 10
struct data{
char fname[30];
char lname[30];
int age;
};

main()
{
    int i;
    struct data base[N];
    for(i=0;i<N;i++){
        printf("\n-------------------------");
        printf("\nPeople Data(%d remaining)\n",N-i);
        printf("---------------------------\n\n");
        printf("\nFirst Name ");
        fgets(base[i].fname,30,stdin);
        printf("\nLast Name ");
        fgets(base[i].lname,30,stdin);
        printf("\nAge ");
        scanf(" %d",&(base[i].age));
        fflush(stdin);
    }

    for(i=0;i<N;i++)
        printf("%s %s Year:(%d)",base[i].fname,base[i].lname,base[i].age);
    return 0;   
}
Run Code Online (Sandbox Code Playgroud)

pra*_*mus 5

fgets()使用输入的字符串读取换行符,因此每次按Enter时,它\n也将读入字符串(请参阅man fgets

您必须检查最后一个字符,并将其\n更改为\0,例如:

size_t length = strlen(base[i].fname);
if (base[i].fname[length-1] == '\n')
    base[i].fname[length-1] = '\0';
Run Code Online (Sandbox Code Playgroud)