C/C++ 四种清空输入缓冲区的方法

8 篇文章 2 订阅

一、

fflush(stdin);

C语言:清空输入缓冲区的所有内容,在VS中没有效果


二、

cin.sync();

C++:清除输入缓冲区的所有内容,在VS中没有效果


三、

cin.ignore(std::numeric_limits< streamsize >::max(), ‘\n’);

C++:清除输入缓冲区的所有内容,直到遇到回车符为止, 各种编译器都有效

简要说明:
cin.ignore(count, c);
从输入流中提取并丢弃字符,直到遇到下列三种情况
1.提取的字符达到了参数count指定的数量
2.在输入序列中遇到文件结束(EOF)
3.输入序列中的下一个字符为参数c指定的字符(这个字符会被提取并丢弃)
可以写成: cin.ignore(10, ‘\n’);
提取输入缓冲区中的数据,直到遇到回车符,当读取的数据到达十个时,就会停止提取,不会继续提取到回车符。(限制提取十个数据)

count常常取:
std::numeric_limits< std::streamsize >::max() 相当于IO流的最大字符个数

常见用法:(把标准输入缓冲区cin的所有数据都清空)
cin.ignore(std::numeric_limits< streamsize >::max(), ‘\n’);

注意:
1.cin.ignore(std::numeric_limits< streamsize >::max(), ‘\n’);在有包含头文件#include <Windows.h>时是无法使用的;

2.因为该头文件已经包含了宏定义min 和 max,再使用就会优先调用头文件#include<Windows.h>中的宏定义,就会起冲突,从而导致报错;

3.如果有要求要包含头文件#include <Windows.h>,而且还要使用cin.ignore(std::numeric_limits< streamsize >::max(), ‘\n’);的话,需要在包含头文件#include<Windows.h>之前加上一句#define NOMINMAX,限定头文件#include<Window.h>中的宏定义min 和 max 就行了;

4.或者直接删去头文件#include<Windows.h>也可以解决问题

5》》》》》》》》》》》》》》》》》》》》》》》》》》》》
还有一种解决方法:
cin.ignore((std::numeric_limits< streamsize >::max)(), ‘\n’);
在回车符前面加上一个括号就可以了,因为不加()的话,max 就和系统中已经有的,预定义的max宏函数混淆了。

附上报错截图:
在这里插入图片描述


四、

char c;
while ((c = getchar()) != ‘\n’);

C/C++:循环读取输入缓冲区的数据,直到遇到回车符为止,效果等效于:清空输入缓冲区的所有数据,直到遇到回车符为止。 在各种编译器中有效。

  • 59
    点赞
  • 197
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cpp_learners

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值