Eingabeprüfung



  • Ich habe Folgendes Problem :

    Ich muss eine Eingabeüberprüfung machen bei einer float zahl. zb. wenn der nutzer ein a eintipt soll ihm gesagt werden das er das nicht darf 😉 Man hat mir gesagt das scanf eine 0 zurückgibt wenn es überladen ist. Im grunde müsste ich eine char string machen ihn überprüfen und dann zu eienr float fariablen übergeben. Hab mich daran versucht bin leider gescheitert. Gibt es die möglichkeit zu überprüfen ob ein korrekter wert in der float Fariablen steht? also kein 'a' oder sowas.

    Ich würde mich bei Unterstützung freuen 🙂



  • floats sind bereits zahlen, da wirst du keine anderen zeichen drin finden, weils binär gespeicherte zahlen sind.

    lies doch die eingabe in einen string und dann geh mit ner prüffunktion drüber.
    1. fängts mit nem +/- an?
    2. kommen jetzt ziffern?
    3. kommt jetzt ein dezimalpunkt/komma? (wenn komma, gleich mal in punkt umwandeln)
    4. kommen jetzt ziffern? (wenn bei 2. keine waren, *müssen* jetzt welche kommen)

    wenn die bedingungen der reihe nach so stimmen, hast du eine richtige eingabe und kannst diesen string dann in float umwandeln( sscanf() oder atof())



  • servus,

    ich hab mir mal vor ewigkeiten ne n00b header geschrieben mit funktionen die nur double, float oder int einlesen, kann sie dir mal geben vielleicht hilfts dir:

    //Für Fehler wird keine Garantie übernommen.
    //Sollten Sie Funktionen aus dieser Header nutzen, wird vorausgesetzt, dass Sie
    //bereits "stdio.h", "stdlib.h", "conio.h" und "math.h" includiert haben
    
    double onlydouble(void)					//Liest nur double, float oder int Werte und gibt diese als double Wert zurück
    {
    	char text[80]={0};
    	char buf;
    	int x=0,z=0;
    
    	while(x!=79)
    	{
    		fflush(stdin);
    		if(buf==13)
    		{	
    			break;
    		}
    		buf=getch();
    		if((buf>='0'&&buf<='9')||(buf=='.'&&z==0)||(buf==','&&z==0)||(x==0&&buf=='-'))	
    		{											
    			if(buf=='.'||buf==',')
    			{
    				z=1;
    				if(buf==',')
    				{
    					buf='.';
    				}
    			}
    			text[x]=buf;
    			printf("%c",buf);
    			x++;
    		}
    	}	
    	return(atof(text));			
    }
    
    int onlyint(void)					//Liest nur int Werte und gibt diese als int Wert zurück
    {
    	char text[80]={0};
    	char buf;
    	int x=0,z=0;
    
    	while(x!=79)
    	{
    		fflush(stdin);
    		if(buf==13)
    		{	
    			break;
    		}
    		buf=getch();
    		if((buf>='0'&&buf<='9')||(x==0&&buf=='-'))	
    		{											
    			text[x]=buf;
    			printf("%c",buf);
    			x++;
    		}
    	}	
    	return(atoi(text));			
    }
    

    mfg hohesC 😃



  • Bitte schlagt mich nicht dafür 😃 .
    Für einen Anfänger war das gar nicht mal so schlecht!

    mfg hohesC 😉



  • [hier stand schwachsinn]



  • Unser täglich fflush(stdin) geb uns heute...



  • Hallo!
    Eine andere, ich finde leichtere Methode ist es, den Rückgabewert von scanf() zu betrachten:

    float f = 0.0F;
      int res;
      res = scanf ("%f", &f);
      if (res != 0)
        printf ("%f\n", f);
      else
        printf ("keine float");
    


  • lol, die wahrheit schlägt mir ins gesicht
    wenigstens war es fun, eine zahl mal zu zerlegen



  • Vielen dank an die gute Hilfe und an die Bemühung 😉
    invaders code hat mir schnell weitergeholfen allerdings musste ich dnoch den tastaturpuffer leeren 😉

    Axo und man darf zb kein ..3 oder 1.3.4 oder sowas eingeben da er es trotzdem mitnimmt 😉 Aber ich denke für mein Prof reicht es 😉

    Vielen Dank


Log in to reply