http://www.pronix.de -> Forum -> Fehlermeldungen und Vorschläge

Fehlermeldungen und Vorschläge

Moderatoren: juergen

Thema: scanf Überlauf erkennen?

scanf Überlauf erkennen?

C-Typ am 27.10.2009 um 15:03

Hallo liebe C-Programmieren,
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

*push*
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

Hallo,

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 (externer link) - bitte Fragen einreichen :)