Problem mit unerwarteter Eingabe
-
void* read_Fraction(Fraction* dest, FILE* source){ if(dest) if(fscanf(source,"%ld/%ld",&(dest->num),(dest->den)) == 2){ if(source == stdin) while(fgetc(stdin) != '\n') ; create(dest,dest->num,dest->den); } else{ fraction_error |= IO_ERROR; return NULL; } return dest; }
Von der Funktion hätte ich mir erhofft, erfolgreich eine Bruchzahl in der Schreibweise z.B. -3/5 einzulesen.
Es gibt jetzt zwei Probleme. Erstens, wenn der Bruchstrich nicht eingegeben wird, und zweitens, wenn man sich vertippt und ein Buchstabe statt einer Zahl versehentlich eingegeben wird.
Ab da scheint fscanf überhaupt nicht mehr zu funktionieren, und bei weiteren Aufrufen geschieht nichts.
Wie ist es möglich, fscanf() im Falle eines versehentlichen Vertippens soweit wieder herzustellen, dass man dem Anwender eine weitere Chance geben könnte, die Zahlen einzugeben?
In einem Buch steht, mit so einerwhile(fgetc(stdin) != '\n') ;
Schleife könnte man es angeblich erreichen, hab ich probiert, aber scheint auch nicht zu funktionieren. Mir bleibt immer nur, das Programm sofort zu beenden, wenn von der Funktion eine NULL zurückkommt. Auch nicht der feine Stil.
Besten Dank, wenn jemand eine Methode kennt, mit der man fscanf() wieder zum Funktionieren bekommt, nachdem einmal fehlerhafte Zeichen in der Eingabe aufgetaucht sind!
-
fscanf(source,"%ld/%ld",&(dest->num),(dest->den))
du hast hier noch den adresse operator vergessen bei dest->den
-
ich würde das ganz als string einlesen, und dann nach den zählen und nenner des bruchs parsen..
-
Thx so werd' ich's machen. Also zuerst als String einlesen.
-
Metatron schrieb:
Thx so werd' ich's machen. Also zuerst als String einlesen.
kann man, musss man nicht