cin-Eingabe alternativ zur einfachen Bestätigung



  • Hallo zusammen,

    in einem kleinen Programm erwarte ich eine Eingabe vom Benutzer.

    Die beim lezten Programmaufruf verwendeten Werte speichere ich in einer Datei und lade diese wieder. Die Werte vom lezten Mal werden angezeigt, wenn der Benutzer zur Eingabe aufgefordert wird.

    Beispiel:

    ifstream lies ("szenario");
    
    cout << "Eingabewert?" << endl;
    int wert1;
    lies >> wert1;
    if (lies.good()) cout << wert1;
    cin >> wert1;
    

    Das klappt soweit auch ganz gut, falls der Benutzer den Wert entweder ändert oder einfach abtippt.

    Das Problem: Eigentlich möchte ich, dass der Benutzer den vorgegebenen Wert einfach mit Enter bestätigen kann, wenn er ihn nicht ändern möchte!
    Einen abweichenden Wert soll er (idealerweise) weiterhin einfach eingeben und mit Enter bestätigen können.

    Mir ist klar, dass "cin >> wert1" für diesen Zweck nicht ausreicht.
    Könnt Ihr mir auf die Sprünge helfen, wie ich das abbilden kann?
    Vielen Dank!



  • Ich stelle mir das etwa so vor:

    template<typename T>
    T read_with_default(T const &dflt, std::istream &in = std::cin) {
      std::string line;
      std::getline(in, line);
    
      // Keine Eingabe
      if(line.empty()) {
        return dflt;
      }
    
      std::istringstream parser(line);
      T result;
    
      if(parser >> result) {
        return result;
      }
    
      // Fehler beim Einlesen. Denkbar auch, erneut nachzufragen oder so. 
      throw something(); 
    }
    


  • Ja, perfekt!
    Auf ein selbstdefiniertes Template bin ich nicht gekommen - klarer Fall von falscher Denkrichtung.

    Vielen Dank!


Log in to reply