Schreiben Sie eine Schleife, in der Indexwerte eingelesen und die entsprechenden Feldelemente ausgegeben werden
-
Wenn etwas eingegeben wird aus dem kein Integer extrahiert werden kann geht der stream in einen Fehlerzustand und gibt konvertiert zu
bool
false
:#include <limits> // std::numeric_limits<> #include <cstddef> // std::size_t #include <cctype> // std::tolower() #include <numeric> // std::iota() #include <array> #include <iostream> std::istream& eat_whitespace_except_newline(std::istream &is) { for (int ch; std::isspace(ch = is.peek()) && ch != '\n'; is.get()); return is; } std::istream& ignore_line(std::istream &is) { return is.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); } std::istream& clear_and_ignore_line(std::istream &is) { is.clear(); return ignore_line(is); } int main() { std::array<int, 8> foo; std::iota(foo.begin(), foo.end(), 42); for (char again{ 'y' }; again == 'y'; std::cout.put('\n')) { std::size_t index; while (std::cout << "Index: ", !(std::cin >> index >> eat_whitespace_except_newline) || index >= foo.size() || std::cin.peek() != '\n') { std::cout << "Input error :(\n\n"; clear_and_ignore_line(std::cin); } std::cout << "foo[" << index << "]: " << foo[index] << '\n'; while (std::cout << "\nAgain? (y/n)\n", !(std::cin >> again >> eat_whitespace_except_newline) || (again = std::tolower(again)) != 'y' && again != 'n' || std::cin.peek() != '\n') { std::cout << "Input error :(\n\n"; clear_and_ignore_line(std::cin); } } }