Fehlermeldungen und Vorschläge
Moderatoren: juergenThema: scanf Überlauf erkennen?
scanf Überlauf erkennen?
C-Typ am 27.10.2009 um 15:03
Ich habe ein Problem mit scanf, undzwar will Ich erkennen wann ein Überlauf stattfindet.
#include <stdio.h>
#include <stdlib.h>
int main(void){
char x = 0;
char check = -1;
do{ check = scanf("%d",&x); } while(getchar() != '\n');
printf("Eingelesenes Zeichen = %d, check = %d", x, check);
getchar();
return EXIT_SUCCESS;
}
Ich habe es mittels "check = scanf" schon versucht, aber es bringt nichts.
Wenn Ich zum Beispiel 128 von scanf einlesen lasse (was ein char nicht annehmen kann), läuft die Variable über und man bekommt -127, aber check ist 1, also sagt mir scanf, dass alles richtig eingelesen wurde, was eigentlich ja nicht stimmt...
Also: Wie bekomme Ich raus, wenn jmd einen zu großen Wert für eine Variable einlesen will? Wenn möglich ist, noch auf C-Ebene, da man vielleicht mit dem Overflow-Flag bzw. Carry-Flag arbeiten muss, oder?
Vielen Dank im Vorraus!
MfG C-Typ
Re: scanf Überlauf erkennen?
C-Typ am 13.11.2009 um 11:26
Anscheinend habe ich in der falschen Topic gepostet (Entschuldigung), sodass mir hier keiner antwortet. Ich versuchs einfach mal mit einem *push*
MfG C-Typ
Re: scanf Überlauf erkennen?
broesel (webmaster) am 17.11.2009 um 16:05
scanf() eignet sich nicht für solche Tests und ist wohl auch eher dazu gedacht, formatierte Eingabestreams einfach einlesen zu können, z.B. CSV-Dateien.
Für Benutzereingaben bietet es sich an, zeichenweise in ein char-Array zu lesen und danach mit strtol(), strtod() et.al. in den erwarteten Datentyp zu konvertieren. Da hast Du dann auch gleich eine optimale Fehleranalyse.
Gruss,
Philip
--
The C Programming Quiz
- bitte Fragen einreichen :)
