diff --git a/main.cpp b/main.cpp index 0c7ccb1..de150c0 100644 --- a/main.cpp +++ b/main.cpp @@ -6,34 +6,53 @@ const vector first_digit_strings = { const vector middle_digit_strings = { "", "zehn", "zwanzig", "deissig", "vierzig", "fuenfzig", "sechzig", "siebzig", "achzig", "neunzig" -}; +}; // TODO: fix typo int main() { int input; // ReSharper disable once CppDFAEndlessLoop + /* + * Use while (true) with break instead of while(cin) to be able to instantly stop the loop in case of an invalid input + */ while (true) { cin >> input; if (!cin) - break; + break; // Stop running loop, if input is wrong if (input < 1 || input > 999) { cout << "Zahl ausserhalb des gueltigen Bereichs.\n"; continue; } + // TODO: remove static_cast int input_length = static_cast(std::to_string(input).length()); int first_digit = input % 10; int middle_digit = ((input % 100) - first_digit) / 10; + int last_two_digits = input % 100; vector result; string suffix = ""; - if (first_digit == 1) - suffix = "s"; - if (middle_digit != 0 && first_digit != 0) - suffix = "und"; - result.push_back(first_digit_strings[first_digit] + suffix); - if (input_length > 1) + if (last_two_digits < 11 || last_two_digits > 12) + { + // Handle everything else + if (first_digit == 1) + suffix = "s"; + if (middle_digit > 1 && first_digit != 0) + suffix = "und"; + suffix = first_digit_strings[first_digit] + suffix; + } + else + { + // Handle 11 and 12 + if (last_two_digits == 11) + suffix = "elf"; + else + suffix = "zwoelf"; + } + result.push_back(suffix); + + if (input_length > 1 && (middle_digit < 11 || middle_digit > 12)) result.push_back(middle_digit_strings[middle_digit]); else result.push_back("");