So I was trying to get valid integer input from cin, and used an answer to this question.
It recommended:
#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); }
Which gives me an error on Windows, saying that the max
macro doesn't take that many arguments. Which means I have to do this
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);
To get it to work. That's pretty ugly; is there a better way to work around this issue? Maybe I should be storing the definition of max
and redefining it afterward?
The min and max functions are declared in the standard C++ algorithm header by the C++ Standard Template Library (STL). The fmin and fmax functions are included in the standard C math.
The max() function returns the greater of two values. The max() function is for C programs only.
std::min is defined in the header file <algorithm> and is used to find out the smallest of the number passed to it.
max is an inline function (implemented using GNU C smart macros) which returns the greater of a and b. They may be any numeric values, either integer or floating point numbers, and they also may be pointers to the same base type.
Define the macro NOMINMAX
:
This will suppress the min and max definitions in Windef.h.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With