Plausibilitäts Prüfung der Eingabe



  • bin recht neu dabei was die Programmierung mit C angeht und gerade dabei meine Belegarbeit für die Uni zu schreiben.

    Habe dabei ein Problem. An sich ist das Programm sehr simpel soll einfach nur mit ein paar eingegebenen Werten Rechnen. Das Problem ist nun das diese Werte halt immer als Zahl eingegeben werden müssen, der User aber ja durchaus auch Buchstaben oder Sonderzeichen eingeben kann. Wie kann ich eine Fehlerabfrage gestallten um ein Absturz oder falsche Werte bei falscher Eingabe zu vermeiden.

    Quelltext:

    #include <stdio.h>

    double lese_f(void)
    {
    double zahl;
    char zeile[80];

    gets(zeile);
    sscanf(zeile, "%lf", & zahl);
    return zahl;
    }

    Eingabe soll solange Wiederholt werden bis ein Wert eingegeben wird der double entspricht.

    Schon mal Danke hoffe es kann mir jemand helfen.



  • wie wärs wenn du dein einlesen und umwandeln in eine zahl in eine schleife packst die so lange läuft bis in dem eingelesene string ne zahl eingegeben wurde...

    und noch ne anmerkung ... nimmt fgets statt gets um einen bufferoverflow zu vermeiden...



  • und wie bricht ja sofort alles zusammen wenn die Eingabe falsch ist???



  • programm stürzt ab und muss neu gestartet werden



  • Und wo ist der Code zu deinem abstürzenden Programm?



  • Ich hab dir ne Funktion geschrieben die nur double float oder int werte nimmt und als double zurück gibt.

    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    
    #define SIZE 40                //Anzahl der Zeichen die eingegeben werden dürfen
    
    double onlydouble(void)					//Liest nur double, float oder int Werte 
    {                        //und gibt diese als double Wert zurück
    	char text[SIZE]={0};
    	char buf;
    	int x=0,z=0;
    
    	while(x!=(SIZE-1))
    	{
    		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));			
    }
    

    Viel spaß damit 😉 !

    mfg hohesC



  • Ich hab die obige Funktion nochmal upgedatet, so dass er das ',' als '.'
    erkennt und das auch -(negative) Werte eingegeben werden können.

    mfg hohesC 🙂


Anmelden zum Antworten