【问题标题】:c++ unable to clear inputStream [duplicate]c ++无法清除inputStream [重复]
【发布时间】:2016-10-13 17:21:15
【问题描述】:

我是 C++ 新手,正在尝试创建一个基本程序。请求两个值并将结果存储在单独的变量中,如下所示:

#include <iostream>

using namespace std;

int main () {

int sizeOfArray = -1, bufferSize = -1;

while (true){
cout << "Enter the size of the array: " << endl;
cin >> sizeOfArray;
if (cin.fail())
cin.clear();


cout << "Enter the size of the buffer (k): " << endl;
cin >> bufferSize;
if (cin.fail())
cin.clear();


if (sizeOfArray > 0 && bufferSize > 0){
break;
} 

}

 return 0;
}

但是,当输入一个非 int 类型的值而不是清除并请求下一个输入时,我会遇到如下所示的无限 while 循环:

输入数组的大小: 输入缓冲区的大小 (k): 输入数组的大小: 输入缓冲区的大小 (k): 输入数组的大小: 输入缓冲区的大小 (k): 输入数组的大小: 输入缓冲区的大小 (k): 输入数组的大小: 输入缓冲区的大小 (k): 输入数组的大小: 输入缓冲区的大小 (k): 输入数组的大小: 输入缓冲区的大小 (k): 输入数组的大小: 输入缓冲区的大小 (k): ^C

【问题讨论】:

  • 你还必须消耗错误的输入来清除输入缓冲区。

标签: c++ while-loop inputstream


【解决方案1】:

cin.clear() 清除cin 的状态。它不会从流中删除有问题的输入。您需要添加代码以忽略该行的其余部分。

if (cin.fail())
{
   cin.clear();
   cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}

添加

#include <limits>

能够使用std::numeric_limits

阅读更多关于std::istream::ignore的信息。

【讨论】:

  • @R Sahu 你能解释一下这行吗 cin.ignore(std::numeric_limits<:streamsize>::max(), '\n');
  • @Sandup,在答案中添加了一个链接。
  • @R Sahu Ah 我现在明白了,谢谢
  • @Sandup,不客气。我很高兴能提供帮助。
猜你喜欢
  • 1970-01-01
  • 2019-03-06
  • 1970-01-01
  • 2018-06-28
  • 1970-01-01
  • 2016-01-15
  • 2018-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多