当前位置:  开发笔记 > 编程语言 > 正文

如何冲洗cin缓冲区?

如何解决《如何冲洗cin缓冲区?》经验,为你挑选了5个好方法。

如何在C++中清除cin缓冲区?



1> Martin York..:

我更喜欢C版本的C++大小限制:

// Ignore to the end of file
cin.ignore(std::numeric_limits::max())

// Ignore to the end of line
cin.ignore(std::numeric_limits::max(), '\n')


更重要的是,价值观可能会有所不同!(streamsize不必是int)

2> Evan Teran..:

可能是:

std::cin.ignore(INT_MAX);

这将读入并忽略所有内容,直到EOF.(你也可以提供第二个参数,它是要读取的字符(例如:'\n'忽略一行).

另外:你可能想要做一个:std::cin.clear();在此之前也要重置流状态.


(我知道.)之前清除,相反,所以流被置于一个良好的状态,它可以在缓冲区上运行.
只是想指出,对于我的情况,我发现'\n'是必要的.否则后续的"cin >>"不起作用.

3> jyggorath..:
cin.clear();
fflush(stdin);

从控制台读取时,这是唯一对我有用的东西.在其他每种情况下,由于缺少\n,它会无限期地读取,或者某些东西会保留在缓冲区中.

编辑:我发现以前的解决方案使事情变得更糟.然而,这个工作:

cin.getline(temp, STRLEN);
if (cin.fail()) {
    cin.clear();
    cin.ignore(numeric_limits::max(), '\n');
}



4> Ben..:

我找到了两个解决方案.

第一个,也是最简单的是使用std::getline()例如:

std::getline(std::cin, yourString);

...当它到达换行符时将丢弃输入流.了解更多关于此功能在这里.

另一个直接丢弃流的选项是......

#include 
// Possibly some other code here
cin.clear();
cin.ignore(numeric_limits::max(), '\n');

祝好运!



5> 小智..:
int i;
  cout << "Please enter an integer value: ";

  // cin >> i; leaves '\n' among possible other junk in the buffer. 
  // '\n' also happens to be the default delim character for getline() below.
  cin >> i; 
  if (cin.fail()) 
  {
    cout << "\ncin failed - substituting: i=1;\n\n";
    i = 1;
  }
  cin.clear(); cin.ignore(INT_MAX,'\n'); 

  cout << "The value you entered is: " << i << " and its double is " << i*2 << ".\n\n";

  string myString;
  cout << "What's your full name? (spaces inclded) \n";
  getline (cin, myString);
  cout << "\nHello '" << myString << "'.\n\n\n";

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有