我制作了一个接受字符串(名字/姓氏)的程序,但不是
Phil Snowken age 3 的典型输出,我得到的是
Phil
斯诺肯
3岁
#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;
}
最佳答案
fgets()
使用输入的字符串读取换行符,因此每次您按下回车键时,它都会将 \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';
关于c - 为什么 printf() 在打印多个字符串 (%s) 时会留下换行符以及如何解决这个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21208274/