用户在结构中的有限输入

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)