问题描述
请帮助这不能正常工作
输入
omayma.firstname : AAAAAAAAAAAAAAAAAAAAAAAAAAA
omayma.lastname : BBBBBBBBBBBBBBBBBBBBBBBBBBBB
输出:
omayma.firstname : AAAAAAAAAABBBBBBBBBB
omayma.lastname : BBBBBBBBBB
预期输出:
omayma.firstname : AAAAA (10 A exatcly)
omayma.lastname : BBBBBB (10)
typedef struct
{
char firstname[10];
char lastname[10];
} person;
int main()
{
person omayma;
printf("firstname : ");
scanf("%10s",omayma.firstname);
fflush(stdin);
printf("lastname : ");
scanf("%10s",omayma.lastname);
fflush(stdin);
puts(omayma.firstname);
puts(omayma.lastname);
return 0;
}
解决方法
让您的代码按您预期的方式工作的建议。
首先,为名称提供更多空间。空间便宜。在结构中变大(足够):
typedef struct
{
char firstname[50];
char lastname[50];
} person;
其次,如果您必须使用 scanf()
,请针对更大的缓冲区进行后续调整...
scanf("%49s",omayma.firstname);// adds room for long names,
或者,您可以使用更好的替代方法完全摆脱 scanf()
:
fgets(omayma.firstname,sizeof omayma.firstname,stdin);
omayma.firstname[strcspn(omayma.firstname,"\n")] = 0;//remove newline
fgets(omayma.lastname,sizeof omayma.lastname,stdin);
omayma.lastname[strcspn(omayma.lastname,"\n")] = 0;//remove newline
printf("%s %s",omayma.lastname,omayma.lastname);
第三,fflush() 仅用于输出流:
fflush(stdin);//delete this statement (everywhere)