scanf() 覆盖下一个变量

scanf() overwrits next variable

我正在尝试获取用户的意见。

void InfoPrint(){
    char FirstName[20];
    char LastName[20];
    int BirthYear;
    printf("Input your First Name: ");
    scanf("%19s", FirstName);
    printf("\nInput your Last Name: ");
    scanf("%19s", LastName);
    printf("\nInput your year of birth: ");
    scanf("%4d", &BirthYear);
    printf("\n%s %s %d\n", FirstName, LastName, BirthYear);
}

为什么当我在 FirstNameLastName 中输入超过 19 个字符时,它会覆盖我的下一个变量?

这是因为输入缓冲区仍然包含将在下一次调用 scanf 时读取的字符。

因此,如果您输入例如 30 个字符并按下 Enter 键,那么 scanf

的第一次调用将读取前 19 个字符
scanf("%19s", FirstName);

并且剩余的 11 个字符将由 scanf 的第二次调用读取。

scanf("%19s", LastName);

或者例如,如果您将输入一个包含 space 字符的字符序列,例如 "Hello World!",那么 scanf 的第一次调用将读取单词 "Hello" scanf 的第二次调用将读取序列 "World!".