scanf和getchar等输入语句共用输入缓冲区产生的问题,以及解决方法 | 您所在的位置:网站首页 › scanf语句输入格式 › scanf和getchar等输入语句共用输入缓冲区产生的问题,以及解决方法 |
scanf和getchar等输入语句共用输入缓冲区产生的问题,以及解决方法
原创
wx645804b23d0b2 2023-05-08 06:10:00 博主文章分类:bug修复 ©著作权 文章标签 输入缓冲区 scanf getchar bug 文章分类 C/C++ 后端开发 ©著作权归作者所有:来自51CTO博客作者wx645804b23d0b2的原创作品,请联系作者获取转载授权,否则将追究法律责任假设有如下代码 int main() { char password[20] = { 0 }; scanf("%s", password); printf("你的密码将设置为%s,请确认\n", password); int i = 0; i = getchar(); switch (i) { case 1: printf("已确认\n"); break; case 0: printf("已删除\n"); break; default: printf("请输入1或0\n"); break; } return 0; }一、bug 当我们运行代码在scanf处输入123后,代码直接执行完毕,并没有等我们在getchar处输入,而是直接执行了switch里 的default。 二、产生原因 在scanf处我们敲下了123和一个回车键,它们以“123\n”储存在输入缓冲区,scanf读走了123,缓冲区还剩一个\n,被getchar直接读取(\n的ASCLL码值为10,非0或1,所以会执行default) 三、解决方法 在scanf和getchar之间加一行代码 while ((getchar()) != '\n') { ; }一直执行getchar直至把输入缓冲区的内容取完 为什么不能只用一次getchar把\n取走就好,而要用while语句一直取,直到把\n取走? 因为有一些情况:当密码输入123 456时,scanf只读取123,后面的“空格”+“456”+“\n”一次取不完,需要用while+getchar取干净。 赞 收藏 评论 分享 举报上一篇:=是赋值,==是判断 |
CopyRight 2018-2019 实验室设备网 版权所有 |