scanf和getchar等输入语句共用输入缓冲区产生的问题,以及解决方法 您所在的位置:网站首页 scanf语句输入格式 scanf和getchar等输入语句共用输入缓冲区产生的问题,以及解决方法

scanf和getchar等输入语句共用输入缓冲区产生的问题,以及解决方法

#scanf和getchar等输入语句共用输入缓冲区产生的问题,以及解决方法| 来源: 网络整理| 查看: 265

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和getchar等输入语句共用输入缓冲区产生的问题,以及解决方法_scanf

二、产生原因

在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 实验室设备网 版权所有