scanf



  • wie kann ich kontrollieren ob der benutzer auch nur zahlen eingibt (und keine buchstaben), wenn ich ein scanf("%d", &var); mache?

    mein programm braucht integerwerte um weiterzuarbeiten.

    ich hoffe mir kann jemand helfen



  • frager schrieb:

    wie kann ich kontrollieren ob der benutzer auch nur zahlen eingibt (und keine buchstaben), wenn ich ein scanf("%d", &var); mache?

    mein programm braucht integerwerte um weiterzuarbeiten.

    ich hoffe mir kann jemand helfen

    Auf den return Wert prüfen, der gibt an wie viele Variablen erfolgreich gelesen werden konnten:

    int i=0, res=0;
    res = scanf("%d", &i);
    
    if (res != 1)  //uh oh, fehlerhafte Eingabe
      fprintf(stderr, "Falsche Eingabe");
    

    MfG

    GPC



  • wie kann ich es nun schaffen, dass der user so lange nach der eingabe gefragt wird, bis er eine zahl eingibt?

    wenn ich es so mache klappt es nicht 😕

    #include <stdio.h>
    
    int main()
    {
    	int i, res = 0;
    
    	while(res != 1)
    		res = scanf("%d", &i);
    
    	printf("%d", &i);
    
    	return 0;
    }
    


  • Dein Problem wird sein, dass sich noch Zeichen im Eingabepuffer befinden. Diese Zeichen werden von scanf() gelesen,
    was dazu führt, dass scanf() in deinem Fall 0 zurückgibt und somit eine Endlosschleife entsteht.

    Mit einer while-Schleife lassen sich diese Zeichen entfernen:

    while((c=getchar())!='\n'&&c!=EOF);
    
    #include <stdio.h>
    
    int main()
    {
        int i, res = 0;
        int c;
    
        while(res != 1) {
            res = scanf("%d", &i);
            while((c=getchar())!='\n'&&c!=EOF);
        }
    
        printf("%d", &i); //der Adressoperator muss entfernt werden
    
        return 0;
    }
    

    Allerdings wäre meiner Meinung nach eine do-while Schleife in dieser Situation geeigneter.

    ➡ ➡ :schland:


Anmelden zum Antworten