From fcf38e62e8160f2c9901bdfd33760afed28beb8d Mon Sep 17 00:00:00 2001 From: Syndamia Date: Sun, 22 Feb 2026 19:18:46 +0200 Subject: feat(Week01): Add solutions --- Week01/Exercise03/ioHelpers.cpp | 57 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 Week01/Exercise03/ioHelpers.cpp (limited to 'Week01/Exercise03/ioHelpers.cpp') diff --git a/Week01/Exercise03/ioHelpers.cpp b/Week01/Exercise03/ioHelpers.cpp new file mode 100644 index 0000000..caf63fe --- /dev/null +++ b/Week01/Exercise03/ioHelpers.cpp @@ -0,0 +1,57 @@ +#include +#include "ioHelpers.h" +#include "stringHelpers.h" + +int readInteger(const char* prompt, int min, int max) { + std::cout << prompt; + + int value; + std::cin >> value; + + while (value < min || max < value) { + std::cout << "Value must in range [" << min << ", " << max << "]! Try again... " << std::endl; + std::cin >> value; + } + + return value; +} + +double readDouble(const char* prompt, double min, double max) { + std::cout << prompt; + + double value; + std::cin >> value; + + while (value < min || max < value) { + std::cout << "Value must in range [" << min << ", " << max << "]! Try again... " << std::endl; + std::cin >> value; + } + + return value; +} + +char* readString(const char* prompt) { + std::cout << prompt; + + const unsigned BUFFER_SIZE = 1024; + char buffer[BUFFER_SIZE]; + + // Когато правим "std::cin >> x", std::cin чете само нужния брой знаци за x, + // докато std::cin.getline чете от последната позиция нататък. + // Тоест, ако направим например "std::cin >> integerValue" и след това + // "std::cin.getline(...)" и входа ни е "5 ABC", тогава първото std::cin + // ще прочете само 5-цата и getline ще запише " ABC". + // Когато обаче имаме нов ред, тоест еквивалентно на "5\nABC", тогава + // getline ще почне да чете от "\nABC", ще види това "\n" и ще запише + // празния низ "". + // std::cin.peek() връща текущата буква, без да премества напред четенето, + // std::cin.ignore() игнорира една буква (т.е. четенето продължава след нея). + // Общо взето, това долу игнорира знак за нов ред, ако сме срещнали такъв. + // Това оправя ситуацията, когато получаваме "First name: Last name: ". + if (std::cin.peek() == '\n') + std::cin.ignore(); + + std::cin.getline(buffer, BUFFER_SIZE); + + return newString(buffer); +} -- cgit v1.3.1-23-gd82d