/*
 * Lösung für Übung 3.8.6 - Quiz Master
 */
#include <iostream>
#include <string>
#include <vector>

int main()
{
  std::cout << "Willkommen zum Quizmaster 3000!" << std::endl;
  std::cout << "Geben Sie jeweils eine Frage und eine dazu passende Antwort ein:" << std::endl;

  // Eine leere Liste für die vom Nutzer eingegebenen Fragen
  std::vector<std::string> questions;
  // Eine leere Liste für die vom Nutzer eingegebenen Antwort
  std::vector<std::string> answers;

  for (int i = 0; i < 3; i++)
  {
    // Die Frage in einer Variable speichern
    std::cout << "Frage Nr. " << i + 1 << ": " << std::endl;
    std::string question;
    std::getline(std::cin, question);

    // Die Antwort in einer Variable speichern
    std::cout << "Antwort für Frage Nr. " << i + 1 << ": " << std::endl;
    std::string answer;
    std::getline(std::cin, answer);

    // Frage und Antwort der jeweiligen Liste hinzufügen
    questions.push_back(question);
    answers.push_back(answer);
  }

  // Die Eingabe der Antworten über eine Menge an leeren Zeilen verstecken
  for (int i = 0; i < 30; i++)
  {
    std::cout << std::endl;
  }

  // Einen kleinen Willkommens-Bildschirm für die Fragerunde anzeigen
  std::cout << "*******************************" << std::endl;
  std::cout << "Willkommen zum Quizmaster 3000!" << std::endl;
  std::cout << " -- Die Fragenrunde beginnt -- " << std::endl;
  std::cout << "*******************************" << std::endl;

  if (questions.size() != answers.size())
  {
    /*
     * Dieser Check wäre eigentlich nicht notwendig, da es keine Möglichkeit im Code
     * gibt, dass die Längen der Listen unterschiedlich sind.
     * Dennoch können wir uns mit solchen Tests vor Programmierfehlern schützen.
     * Stellen Sie sich vor, Sie hätten oben aus Versehen "answers.push_back(answers);"
     * vergessen (nicht dass mir etwa genau das beim Erstellen der Musterlösung passiert wäre).
     * Dann würde dieser Test fehlschlagen und damit auf diesen Tippfehler hinweisen.
     */
    std::cerr << "Unerwarteter Fehler: Die Menge an Fragen (" << questions.size() << ") "
              << "und die Menge an Antworten (" << answers.size() << ") unterscheiden sich.";
    return 1;
  }

  /*
   * Da beide Listen gleich lang sind, macht es keinen Unterschied, ob wir von Null bis
   * questions.size() oder von Null bis answers.size() gehen.
   */
  for (int i = 0; i < questions.size(); i++)
  {
    std::cout << "Frage Nr. " << i + 1 << ": "  << questions.at(i) << std::endl;
    std::cout << "Was ist Ihre Antwort?" << std::endl;

    // Die Antwort des Nutzers entgegennehmen
    std::string answer;
    std::getline(std::cin, answer);

    // Mit der vorgegebenen Antwort vergleichen
    if (answer == answers.at(i))
    {
      std::cout << "Korrekt!" << std::endl << std::endl;
    }
    else
    {
      std::cout << "Leider falsch! Die richtige Antwort ist: " << std::endl;
      std::cout << answers.at(i) << std::endl << std::endl;
      /*
       * Hinweis: std::cerr wird für Fehlermeldungen verwendet, allerdings handelt es
       * sich hier nicht um einen Programmfehler. Es gehört sozusagen zum normalen
       * Programmablauf, dass eine Quizfrage falsch beantwortet wird. std::cerr wird
       * für unerwartete Situationen (z.B. siehe oben) oder bei Fehlbedienungen benutzt
       * Hier ist allerdings std::cout passender.
       */
    }
  }

  return 0;
}
