
问题
我制作了一个程序,该程序可以接受字符串(名字/姓氏),而不是典型的
输出
3岁的菲尔·斯诺肯(Phil Snowken),我要得到

菲尔
下雪了
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()使用输入的字符串读取换行符,因此每次按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';

本文解决: IT之家»当打印多个字符串(%S)时,为什么printf()保留换行符,以及如何解决此问题?
问题
我制作了一个程序,该程序可以接受字符串(姓氏/名字),但不接受3岁的Phil Snowken的典型输出,并且得到的结果为Phil结果
下雪了

结果3岁
的#include&LT;&stdio.h中GT;
#定义N 10
结构数据{
CHAR FNAME [30];
CHAR LNAME [30];
INT年龄;
};主要()
{
INT I;
结构数据基础[N];
对于(i = 0; I&LT; N;我++){
的printf(\\ n -------------------------);
的printf(\\ nPeople数据(还剩%d)\\ n,N-1);
的printf(--------------------------- \\ n \\ n);
的printf(\\ n第一名称);
与fgets(基[I] .fname,30,标准输入);
的printf(\\ n上次名称);
与fgets(基[I] .lname,30,标准输入);
的printf(\\ NAGE);
scanf的(%D,及(基[I]。年龄));
fflush(标准输入);
} 对于(i = 0; I&LT; N;我++)
的printf(%s%S年份:(%D),基地[I] .fname,基地[I] .lname,基地[I]。年龄);
返回0;
}
解决方案
使用fgets()作为字符串读取换行符,因此,每次输入preSS时printf输出字符串不加换行符,您也会\\ n也读取字符串(请参阅man和fgets)
您需要检查的最后一个字符是否为\\ n,将其更改为\\ 0,如下所示:
为size_t长度= strlen的(基地[I] .fname);
如果(基[I] .fname [长度1] =='\\ n')
基地[I] .fname [长度1] ='\\ 0';
本文解决: IT之家»当打印多个字符串(%S)时,为什么printf()保留换行符printf输出字符串不加换行符,以及如何解决此问题?
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-155130-1.html
到时要修改婚姻法