#ifndef GS_CLI #define GS_CLI #include #include #include namespace cli { template void readUserInput(T& outValue, const char* enter_message, const char* error_message) { std::cout << enter_message; std::cin >> outValue; while (std::cin.fail()) { std::cerr << error_message << std::endl; std::cin.clear(); std::cin.ignore(std::numeric_limits::max(), '\n'); std::cout << enter_message; std::cin >> outValue; } } template void readUserInputMax(T& outValue, T max_value, const char* enter_message, const char* error_message) { readUserInput(outValue, enter_message, error_message); while (outValue >= max_value) { std::cerr << error_message << std::endl; readUserInput(outValue, enter_message, error_message); } } template void scanTwoValues(const char* format, T& outFirst, U& outSecond, const char* enter_message, const char* error_message) { std::cout << enter_message; while (scanf(format, &outFirst, &outSecond) != 2) { std::cerr << error_message << std::endl; std::cout << enter_message; std::cin.clear(); std::cin.ignore(std::numeric_limits::max(), '\n'); } } } #endif /* GS_CLI */