#include "../include/distime.h" #include #include #include namespace distime { void parseTimeInput(std::tm &resultTime, const std::tm ¤tTime) { std::string timeInput{}; bool continueLoop{true}; while (continueLoop) { // Unique formatting of 'cout' should make the output easier to predict std::cout //blank << "\nCurrent time: " << std::put_time(¤tTime, "%d-%m-%Y %H:%M\n") //blank << "Day (dd) Month (mm) Year(yyyy) 24 Hour (HH) Minute (MM)\n" << ">: "; std::getline(std::cin, timeInput); if (std::ranges::any_of(timeInput.cbegin(), timeInput.cend(), [] (char input) {return !isdigit(input) && !isspace(input);})) { std::cout << "Cannot contain non-numbers"; continue; } int spaceCheck = static_cast(std::ranges::count(timeInput.cbegin(), timeInput.cend(), ' ')); if (spaceCheck != 4) { if (spaceCheck < 4) std::cout << "Too few spaces\n"; else if (spaceCheck > 4) std::cout << "Too many spaces\n"; std::cout << "Example of a working input: '25 02 2015 06 00' \n"; std::cout << "Press enter to continue..."; std::cin.get(); continue; } continueLoop = false; } std::istringstream timeStream {timeInput}; int day, month, year, hour, minute; timeStream >> day >> month >> year >> hour >> minute; // Assign the values to resultTime resultTime.tm_mday = day; resultTime.tm_mon = month - 1; resultTime.tm_year = year - 1900; resultTime.tm_hour = hour; resultTime.tm_min = minute; resultTime.tm_sec = 0; } }