来自用户在结构中的有限输入

问题描述

请帮助这不能正常工作

输入
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)