Wertebereichsrüfung



  • Hallo,

    ich versuche gerade von einer Variablen a (typ unsignend int), die ich über scanf(); einlese, zu überprüfen ob sie zu groß für den Wertebereich von unsigned int ist, doch bekomme ich das nicht hin.
    Gebe ich eine zahl ein die größer als 4294967295 ist, fängt das programm einfach wieder bei 0 an und zählt wieder hoch.
    Aber genau das möchte ich ja vermeiden.
    wie kann ich das bewerkstelligen, das er nicht wieder bei 0 anfängt sondern das programm abbricht?

    Hier mal mein codeausschnitt:

    const unsigned int maxdezimal = 0xffffffff-1;
    unsigned int zahleingabe;
    
    	printf("\nBitte geben Sie ein Dezimalzahl ein: ");
    	scanf("%d",&zahleingabe);	
    
    	if(zahleingabe>maxdezimal)
    	{
    		printf("Die eingegebene Dezimalzahl uebersteigt den Wertebereich\nfuer \"unsigned int\" (max. %u)\n", maxdezimal);		
    	}
    


  • Mit scanf schiebst Du den Wert immer in einen unsigned int hinein (auch wenn man dazu korrekterweise %u verwenden müsste). Nachdem er da drin ist, wurde natürlich sein Wert so zu zurechtgestutzt, daß er auch in einen unsigned reinpasst, sonst könnte er ja nicht driun sein; darum sind Abfragen wie "if(zahleingabe>maxdezimal)" nicht sinnvoll, weil es nie der Fall ist.

    Das richtige Vorgehen wäre, einen String einzulesen, und den zu analysieren. Nur wenn er kleiner als UINT_MAX (und größer 0) ist, darf er in einen unsigned. Ja, das ist nicht schön, aber da merkt man eben, woher C ursprünglich kommt.

    (Es gibt auch Bibliotheken für lange Zahlen unter C ..)


Anmelden zum Antworten