Eingabe-Operationen: Erläuterung zu putback()  (1/3)

Mit dieser Standardmethode der Eingabe kann ein "ungewolltes Zeichen" in den Stream zurückgeschrieben werden, damit es an anderer Stelle noch zur Verfügung steht und gelesen werden kann. Wenn man beispielsweise ein Zeichen nur unter einer bestimmten Bedingung einlesen möchte (z.B. unter der Bedingung, daß es sich bei dem Zeichen um einen Character-Typ handelt), es ansonsten jedoch im Stream belassen will, kann man dies über putback() realisieren.
Um die Bedingung zu überprüfen, ist es notwendig, daß Zeichen bereits (als Character) einzulesen. Handelt es sich bei dem Zeichen jedoch nicht um den erwarteten Character, so hat man über die Methode die Möglichkeit, den Stream in den Zustand vor dem Einlesen des Zeichens zurückzuversetzen.
Ein kleines Beispiel soll dies verdeutlichen: Es wird Eingabe-Operator >> für einen benutzerdefinierten Typ -- hier wieder unser Beispiel eines Bruchs -- definiert:

  istream& operator>>(istream& str, bruch& b)
  /*
     Folgende Eingabeformate für einen Bruch sollen unterstützt werden (d stehe hierbei für double):
          d       - nur Zähler angegeben
         (d)      - nur Zähler angegeben, nun aber in Klammern gesetzt
         (d, d)   - ausführliche/vollständige Schreibweise mit zaehler, nenner (in Klammern gesetzt)
      Ein Bruch bestehe aus Zähler und Nenner, zudem stehe für die bruch-Klasse ein Konstruktor
      bruch(zaehler,nenner) bereit.
  */
  {
    double zaehler = 0, nenner = 1;     // Defaultwerte des Bruchs
    char c = 0;                         // Setzen des Character, damit dieser nicht
                                        // zufällig mit '(' besetzt ist.

  // ... [Fortsetzung: siehe nächste Seite !]