所以我尝试从cin获取有效的整数输入,并使用了这个问题的答案。
它建议:
#include <Windows.h> // includes WinDef.h which defines min() max()
#include <iostream>
using std::cin;
using std::cout;
void Foo()
{
int delay = 0;
do
{
if(cin.fail())
{
cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
cout << "Enter number of seconds between submissions: ";
} while(!(cin >> delay) || delay == 0);
}
这在Windows上会导致错误,提示max
宏不接受那么多参数。这意味着我必须这样做:
do
{
if(cin.fail())
{
cin.clear();
#undef max
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
cout << "Enter number of seconds between submissions: ";
} while(!(cin >> delay) || delay == 0);
为了使它能够工作。这很丑陋; 有没有更好的方法来解决这个问题?也许我应该存储max
的定义并在之后重新定义它?
为了解决这个问题,需要一个可行的办法。存储max
的定义并在之后重新定义可能是一种更好的解决方案。
std::min
/std::max
发生冲突。 - PlasmaHH