如何正确清空cin缓存

关于cin缓存的清空,网上有各种说法。最多的是使用

cin.sync();

但是,关于这个sync方法在不同的编译器中有不同的实现。VC中确实可以清空cin的缓存,但是在GNU中,不行。因此使用sync方法是没有通用性的。

又有说法是使用

cin.seekg(0, ios_base::end);

但是依旧无法正常工作。以下是一个测试代码:

#include <iostream>

using namespace std;

int main() {
    int a, b;
    cin >> a;
    cin.seekg(1, ios_base::end);
    cin >> b;
    cout << a << ‘,‘ << b << endl;

    return 0;
}

测试结果为:

还有一种方法是使用

fflush(stdin);

这种方法一般是可以成功的。但是,如果肯定只使用cin和cout,而不使用stdio的内容的话,可以加入以下语句增加输入输出的速度:

cin.sync_with_stdio(false);

这种情况下,fflush无法正常工作了。

最后,说一个肯定可以解决问题的方案,使用ignore方法,第一个参数表示忽略多少个字符,可以传入第二个参数,表示直到碰到什么字符为止。可以使用以下方案:

cin.ignore(INT_MAX, ‘\n’);

最终的解决方案示例代码如下:

#include <iostream>

using namespace std;

int main() {
    int a, b;
    cin.sync_with_stdio(false);
    cin >> a;
    cin.ignore(INT_MAX, ‘\n‘);
    cin >> b;
    cout << a << ‘,‘ << b << endl;

    return 0;
}

效果如下:

时间: 2024-10-23 01:28:52

如何正确清空cin缓存的相关文章

关于arduino清空串口缓存(转)

在arduino1.0之前的版本 Serial.flush()的作用是是清空串口缓存( dropping received incoming data).但在1.0之后的版本 Serial.flush()的作用调整为了等待串口数据传送完毕(Waits for the transmission of outgoing serial data to complete.)(引用自http://arduino.cc/en/Serial/Flush). 因为我在使用wifibee的过程中,如果既想用Ser

asp.net里如何清空页面缓存的后台代码

asp.net里如何清空页面缓存的后台代码(因为只有GET请求会有缓存)   题描述:当使用ajax的时候,很有可能出现同一次请求,这里.比如buttonA修改了数据,而buttonB导出数据,如果两个按钮都采用ajax的技术来做的话,实际上buttonB在第二次点击以后,不会重新从数据库里获得一次数据,而是直接将缓存页发送给客户端.恩-这么做是好的,但是不是我们希望的.所谓使用了Ajax产生了不可预计的结果,有一部分可能也许就在于此.所以我要做的就是每次GET请求的时候都去清空缓存,然后再生成

drop_caches清空系统缓存

针对程序异常终端,缓存中数据并未同步到磁盘上,需要先调用sync同步数据到磁盘,在清空drop_caches缓存. 在清空缓存之前使用sync命令同步数据到磁盘 # cat /proc/sys/vm/drop_caches 默认是0,1表示清空页缓存,2表示清空inode和目录树缓存,3清空所有的缓存 #sync #free -m total       used       free     shared    buffers     cached Mem:         23953    

清空DNS缓存

昨天写了个Python的脚本,功能就是爬取一个网页上的Google ip地址再写入到本机的hosts里面去. 但是写完并且运行完成之后发现上不了Google.于是想到了是不是要清空一下DNS的缓存.不过我只知道win下面清空缓存,在CMD里面打ipconfig /flushdns就行了,Mac用了两个月还不太熟,就上网找了一下,发现Mac下不同的系统竟然需要不同的命令.这里只记一下lion系统往后的命令,之前的也没啥用. Lion.Mountain Lion.Mavericks的命令是sudo

【WP开发】正确理解页面缓存

注:本文内容面向Runtime App. 在新建项目后,细心观察,你会发现在App类中有以下代码: // TODO: 将此值更改为适合您的应用程序的缓存大小                rootFrame.CacheSize = 1; 这行代码放在了OnLaunched方法中,CacheSize是Frame类的一个公共属性. 我们知道,Frame类负责完成页面之间的导航,它本身就是一个容器控件.CacheSize属性用于告诉Frame对象,要缓存的页面数量.近日,有人提问说,这个缓存页面数是不

清空IE缓存

1.打开IE Internet选项 点击设置 2.打开临时文件 点击 查看文件 将目录下的 文件全部删除  重新打开网站即可 到此IE缓存就被删除.

清空浏览器缓存,网站登陆界面仍然记住密码

这显然不是啥技术博文啦,只是记载下平时遇到的小问题~ 如题,在FireFox下清空下图选项,登陆淘宝的时候,还是会自动填写账号密码. 然后我就进入工具-选项 看了下,结果在安全里找到了,所有已保存的密码都在这了...

C++正确的cin输入

void test1(void) { int number; cout << ">> pls input a integer number:"; while(cin >> number, !cin.eof()) { if(cin.bad()) { cout << "stream has corrupted!" << endl; return; } else if (cin.fail()) { cin.cle

[转]如何清空Chrome缓存和Cookie

当您使用浏览器(例如 Chrome)时,浏览器会将网站中的一些信息保存在其缓存和 Cookie 中. 清除这些内容可以解决某些问题,例如网站上的加载或格式设置问题. 在 Chrome 中 在计算机上打开 Chrome. 点击右上角的"更多"图标 更多. 依次点击更多工具 接着 清除浏览数据. 在顶部,选择一个时间范围.要删除所有内容,请选择时间不限. 选中"Cookie 及其他网站数据"及"缓存的图片和文件"旁边的复选框. 点击清除数据. 了解如