scanf Eingabe überprüfen



  • Wie kann ich überprüfen, ob die von scanf eingelesenen Eingabe eine Zahl ist. Mit isdigit() muss ich die Eingabe ja als char speichern, ich möchte jedoch integer verwenden.



  • isdigt() überprüft nur ein Zeichen (kein String)
    Willst du nur eine Ziffer einlesen oder eine Zahl?

    Ziffer:

    if(isdigit(*text)) {
      puts("Ziffer")
    }
    

    Zahl

    #include <stdlib.h>
    char *endptr
    
    strtol(text,&endptr,10); // strtod für Fließkommazahlen
    if(*endptr == '\0' || isspace(*endptr))
      puts("Zahl")
    }
    

    Oder du liest bei scanf mit %d oder %f ein.



  • returner2 schrieb:

    Wie kann ich überprüfen, ob die von scanf eingelesenen Eingabe eine Zahl ist.

    Mit scanf allein gar nicht.



  • Zahlen will ich überprüfen.
    Aber mit deinem Code stürzt er ab...



  • int liesLong(long *l,const char *s)
    {
      char *e;
      errno=0;
      *l=strtol( s,&e,10 );
      return (!*e||*e=='\n')&&errno!=ERANGE;
    }
    
    ...
    char s[100];
    long l;
    fgets( s,100,stdin );
    if( liesLong(&l,s) )
      printf("Long: %ld",l);
    else
      fputs("Fehler",stderr);
    


  • Warum so kompliziert?

    #include <stdio.h>
    
    int main()
    {
    	long zahl;
    
    	if (scanf("%ld", &zahl))
    	{
    		printf("Zahl: %ld\n", zahl);
    	}
    	else
    	{
    		printf("Keine Zahl\n");
    	}
    
    	return 0;
    }
    


  • Schwachfug.
    Endende Nichtziffern werden ignoriert, keine Wertebereichsprüfung, und der Eingabepuffer wird auch noch geleert.



  • kjljkl schrieb:

    Warum so kompliziert?

    #include <stdio.h>
    
    int main()
    {
    	long zahl;
    
    	if (scanf("%ld", &zahl))
    	{
    		printf("Zahl: %ld\n", zahl);
    	}
    	else
    	{
    		printf("Keine Zahl\n");
    	}
    
    	return 0;
    }
    

    was am code von wutz ist bitte kompliziert? er ist effizient und direkt zudem auch
    fehlerbehandelnd.



  • Für C Anfänger oder Neueinsteiger ist der code von Wutz schon unverständlich. Der gleiche code soll für meinen Fehler aus einem anderen thread auch hilfreich sein. Allerdings verstehe ich da einiges noch nicht. Wer dass also nicht versteht sollte sich wohl noch etwas näher mit c beschäftigen.



  • itedvo schrieb:

    was am code von wutz ist bitte kompliziert? er ist effizient und direkt zudem auch
    fehlerbehandelnd.

    Dir ist aber schon klar, dass der der Code, den zu zitierst, nicht der von Wutz ist? 😉



  • schon klar, ich habe das zitat auf seine aussage verwendet... zuerst wollte ich noch was dazu schreiben, dafür auch der teil mit dem source-code, doch ich entschied mich anders und vergaß den mitzitierten code zu entfernen...


Anmelden zum Antworten