用户在结构中的有限输入
limited input from user in struct
求助,这不能正常工作
输入
omayma.firstname:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
omayma.lastname:BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
输出:
omayma.firstname : AAAAAAAAAABBBBBBBBBBB
omayma.lastname : BBBBBBBBBB
预期输出:
omayma.firstname : AAAAA(精确到 10 A)
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;
}
使您的代码按您可能预期的方式工作的建议。
首先,为名称提供更多 space。 space 很便宜。在结构中变大(足够):
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)
求助,这不能正常工作
输入
omayma.firstname:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
omayma.lastname:BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
输出:
omayma.firstname : AAAAAAAAAABBBBBBBBBBB
omayma.lastname : BBBBBBBBBB
预期输出:
omayma.firstname : AAAAA(精确到 10 A)
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;
}
使您的代码按您可能预期的方式工作的建议。
首先,为名称提供更多 space。 space 很便宜。在结构中变大(足够):
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)