c++无法清除inputStream

c++ unable to clear inputStream

本文关键字:inputStream 清除 c++      更新时间:2023-10-16

我是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

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的更多信息