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);
}
为什么当我在 FirstName
或 LastName
中输入超过 19 个字符时,它会覆盖我的下一个变量?
这是因为输入缓冲区仍然包含将在下一次调用 scanf
时读取的字符。
因此,如果您输入例如 30 个字符并按下 Enter 键,那么 scanf
的第一次调用将读取前 19 个字符
scanf("%19s", FirstName);
并且剩余的 11 个字符将由 scanf
的第二次调用读取。
scanf("%19s", LastName);
或者例如,如果您将输入一个包含 space 字符的字符序列,例如 "Hello World!"
,那么 scanf
的第一次调用将读取单词 "Hello"
scanf
的第二次调用将读取序列 "World!"
.
我正在尝试获取用户的意见。
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);
}
为什么当我在 FirstName
或 LastName
中输入超过 19 个字符时,它会覆盖我的下一个变量?
这是因为输入缓冲区仍然包含将在下一次调用 scanf
时读取的字符。
因此,如果您输入例如 30 个字符并按下 Enter 键,那么 scanf
scanf("%19s", FirstName);
并且剩余的 11 个字符将由 scanf
的第二次调用读取。
scanf("%19s", LastName);
或者例如,如果您将输入一个包含 space 字符的字符序列,例如 "Hello World!"
,那么 scanf
的第一次调用将读取单词 "Hello"
scanf
的第二次调用将读取序列 "World!"
.