Falsche Eingabe für eigene Klasse abfangen

Cemu

Grünschnabel
Hey, folgendes Problem:

Ich habe eine Klasse "Bruch" geschrieben, dort werden für ein Objekt Bruch Zähler und Nenner als long int gespeichert. Ich habe mir die Operatoren der Grundrechenarten überladen und kann jetzt auch problemlos und fehlerfrei mit meiner Klasse rechnen. Nun möchte ich einen Taschenrechner basteln, welcher mit diesen Brüchen rechnen kann. Das sieht dann ungefähr so aus:

1/2 *Nutzer drückt ENTER*
+ *Nutzer drückt ENTER*
1/2 *Nutzer drückt ENTER*
= 2/2 = 1/1

Die Ergebnisse werden berechnet und ausgegeben.

Mein Problem liegt in der Eingabe, denn die funktioniert natürlich nur, wenn der Nutzer auch die Form "zaehler/nenner" korrekt durchführt. Ich möchte, das nach jedem ENTER nachgeprüft wird, ob der Bruch bzw. Operator der Form entspricht. Wenn nicht, dann möchte ich dem Nutzer dies mitteilen und die Eingabe wiederholen.

Eingabeoperator ist überladen worden:
C++:
std::istream& operator>>(std::istream& is, Bruch& eingabe){
  Bruch temp;
  char bruchstrich;
  is >> temp.zaehler >> bruchstrich >> temp.nenner;
  eingabe = Bruch(temp);
  return is;
}

Habe schon soetwas versucht:
C++:
while(!(std::cin>>bruch1)) {
         std::cin.clear();
         std::cin.ignore(std::numeric_limits<long int>::max());
         std::cout<<"Eingabe nicht korrekt. Bitte wiederholen." << std::endl;
     }
Aber das war nicht so erfolgreich. Hoffe ihr könnt helfen.
biggrin.gif
 

Rene42

Erfahrenes Mitglied
Leider sagt mir die "Aber das war nicht so erfolgreich" nichts. Lässt sich der Code nicht kompilieren? Ist das Verhalten anders als gewünscht? (Wenn ja wie?)
 

jkallup

Erfahrenes Mitglied
versuche mal die C Funktion "int z, d; char buffer[]; buffer = scanf("%d/%d",&z,&n); printf("-->%d / %d\n", z, n);"