栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C/C++清理输入缓冲区中的内容

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C/C++清理输入缓冲区中的内容

C/C++清理输入缓冲区中的内容
  • 1.清理输入缓冲区最后剩下的单个回车符:
    • 方法一:用getchar函数读取回车符:
    • 方法二:用scanf("%*c")读取掉回车符:
    • 方法三:用scanf(" %c",&ch):
  • 2.清理输入缓冲区中剩下的所有内容:
    • 方法一:用getchar函数结合循环语句 :
    • 方法二:用scanf("%*[^n]"):

1.清理输入缓冲区最后剩下的单个回车符:

scanf读取字符时遇到空格和回车符时都会停止读取,如上述代码,我们输入abcdefgh然后按下回车键,此时输入缓冲区内容:abcdefghn,输入缓冲区遇到n,scanf语句开始读取,scanf语句会把我们输入的字符串abcdefgh存储到字符数组intput中,遇到n停止,因此此时输入缓冲区还剩一个n,被getchar读取,并赋值给变量ch,故此时ch = ‘n’,所以会输出确认失败。

应对这种情况,我们只需要事先将输入缓冲区中最后的回车字符读取掉就可以了:

方法一:用getchar函数读取回车符:

我们输入abcdefgh并按下回车键,此时输入缓冲区的内容为:abcdefghn,输入缓冲区遇到n,scanf开始读取,scanf会把abcdefgh读取并存储到字符数组中,遇到n后停止,此时输入缓冲区的内容为:n,然后用getchar函数读取输入缓冲区中最后的单个回车符,这个时候输入缓冲区就清空了,后面的程序得以正常执行。

方法二:用scanf(“%*c”)读取掉回车符:

scanf(“%*c”):读取单个字符。

我们输入abcdefgh并按下回车键,此时输入缓冲区的内容为:abcdefghn,输入缓冲区遇到n,scanf开始读取,scanf会把abcdefgh读取并存储到字符数组中,遇到n后停止,此时输入缓冲区的内容为:n,然后用scanf(“%*c”)读取输入缓冲区中最后的单个回车符,这个时候输入缓冲区就清空了,后面的程序得以正常执行。

方法三:用scanf(" %c",&ch):

scanf(" %c,&ch):输入缓冲区最后的单个回车符会被%c前面的空格读取,这样我们最后输入的字符就会被scanf读取并赋值给变量ch:

2.清理输入缓冲区中剩下的所有内容:

仔细看下图代码,为什么又出现了上述情况,还没等我们输入,程序就自动输出确认失败了:
当我们输入hhh wwrer时并按下回车键后,此时输入缓冲区的内容为:hhh wwrern,然后由scanf语句进行读取,当scanf语句读取字符串的时候,读到空格就结束了,此时输入缓冲区的内容为: wwwrern,因此第一个getchar()就会把空格读进去,然后第二个getchar就把‘w’读进去了并赋值给变量ch,然后执行下面的if语句,那肯定会直接输出确认失败。

所以当我们需要重新输入字符让getchar()读取的时候,我们最好先清理键盘缓冲区中的所有内容,我们可以考虑用下面代码来清理缓冲区:

方法一:用getchar函数结合循环语句 :
int tmp = 0;

while ((tmp = getchar()) != 'n')
{
	;//空语句
}

这段代码会把键盘缓冲区中的所有字符包括回车字符也读取掉,那么在之前的代码中加入上述清理缓冲区代码:

如图所示:scanf将hehe读取到字符数组中后,输入缓冲区中的剩余字符都被清理了,程序得以正常执行。

方法二:用scanf(“%*[^n]”):

scanf(“%*[^n]”):表示从缓冲区中读取掉任意字符,只要不是n就⼀直进⾏,遇到n才停下。这时输入缓冲区中还剩下一个n,那么又回到了最开始讨论的问题,清除输入缓冲区中最后的单个回车符:用scanf(“%*c”)和getchar函数:

先输入hehe sdsdsd按下回车键,此时输入缓冲区的内容为:hehe sdsdsdn,输入缓冲区遇到n,故第一条scanf语句开始读取,scanf遇到空格停止,此时输入缓冲区中的内容为: sdsdsd,然后开始清空缓冲区,由第二条scanf语句开始读取,遇到n停止,此时输入缓冲区的内容为:n,然后第三条scanf语句开始读取n,最终输入缓冲区清空,程序得以正常执行。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/882944.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号