c - scanf() 覆盖下一个变量
问题描述
我正在尝试从用户那里获得输入。
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);
}
为什么当我输入超过 19 个字符FirstName
或LastName
它会覆盖我的下一个变量时?
解决方案
这是因为输入缓冲区仍然包含将由下一次调用读取的字符scanf
。
因此,如果您输入了例如 30 个字符并按下了 Enter 键,那么前 19 个字符将在第一次调用scanf
scanf("%19s", FirstName);
剩下的 11 个字符将被 . 的第二次调用读取scanf
。
scanf("%19s", LastName);
或者例如,如果您将输入一个包含空格字符的字符序列,"Hello World!"
那么第一次调用scanf
将读取单词"Hello"
,第二次调用scanf
将读取序列"World!"
。
推荐阅读
- operating-system - 内存管理中的分页和绑定方案
- javascript - JFrog 将 docker 镜像从远程存储库复制/复制到本地存储库
- android - 在不使用保存按钮的情况下保存editText,应用程序停止工作
- mysql - 设置约束
- javascript - 在 redux 动作生成器中添加异步代码而不返回函数并使用 redux-thunk?
- swift - 更新 Enum 的值
- reactjs - 更新用户个人资料信息页面 - React useState
- redux - Gatsby wrapRootElement/wrapPageElement 在 localhost 上工作,但没有部署到共享主机
- ios - 在应用程序中轻松显示所有 SF 符号图标的方法
- c - C:在计算中使用无符号操作数时如何最好地处理无符号整数模算术(“环绕”)