Einlesen von int. Überlauf vermeiden.



  • Hallo Leute,

    ich habe folgendes Problem bei dem dem ich keine Lösung finde. Ich bin noch Anfänger, vielleicht ist die Frage etwas doof, aber ich stell sie trotzdem mal:

    ich habe eine unsigned int definiert und möchte dieser Variable Werte zuweisen, die der Benutzer eingibt. Hält sich der Benutzer nicht an den gültigen Wertebereich (0-65535) kommt es beim Einlesen soviel ich weiß zu einem Überlauf, d.h. bei Eingabe von z.B 65536 steht 0 in meiner Variable. Kann man sowas ausschließen und irgendwie abfangen?

    VG
    kneitl



  • hi,
    nimm doch 'unsigned long'. da passt mehr rein...



  • ich hätte es irgendiwe so gemacht.

    #include<stdio.h>
    
    int eingabe(unsigned int wert){
    	if (wert >-1 || wert < 65536)
    		return 0;
    	else {
    		printf("Falsche Eingabe. Bitte noch einmal.\n");
    		return 1;
    	}
    }
    
    int main(void){
    	unsigned int input = 1;
    	do
    	{
    		printf("Bitte geben Sie einen Wert ein: ");
    		scanf("%u",&input);
    	}
    	while (eingabe(input)==1);
    	return 0;
    }
    


  • if (wert >-1 || wert < 65536)
            return 0;
    

    Ich wage zu behaupten das dieser Vergleich immer wahr ist.
    Da negative Werte in einem unsigned int numal nicht vorkommen.
    Außerdem gehen in einen "normalen" int mit 32 bit "4294967296" rein !

    65536 wären es bei einem normalen unsigned short int.



  • laut test hat er negative zahlen nicht angenommen, ansonsten hatte ich mich an die werte vom fragenden gehalten...



  • Eingaben immer erst als String verarbeiten, dann kann man auch checken oder die Zahl (im String) zu groß ist.



  • würde mal sagen da kommt && statt || hin.


Log in to reply