为什么printf()在打印多个字符串(%s)时会留下换行符以及如何解决这个问题?

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

#include  #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",Ni); 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; } 

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';