Eingabeüberprüfung auf Buchstaben oder Zahlen



  • Hallo, habe folgendes Problem:

    Ich will die Benutzereingabe auf Buchstaben und Zahlen überprüfen. Der Benutzer soll nur Zahlen eingeben können. Sollte er keine Zahl eingegeben haben, soll die Abfrage wiederholt werden.

    Ich habes es folgendermassen versucht aber so funktioniert es nicht.

    short check;

    check = scanf("%lf",&k);
    if (k> 100000 || k<0 || check!=1)
    {
    do
    {
    printf("bla");
    check = scanf("%lf",&k);
    }while (k> 100000 || k<0 || check=0);

    wobei check=0 schon nicht funktioniert.
    Es kommt die Fehlermeldung: Lvalue required for function main. Wenn ich check=0 weglasse, kommt dieser Fehler nicht aber bei Buchstabeneingabe springt das Programm direkt ohne etwas zu berechnen ans ende.

    Wäre dankbar für eure Hilfe.



  • Das Problem mit check = 0 habe ich schon gelöst. check == 0.
    Wenn ich jetzt aber Buchstaben eintippe ist das Programm eine endlosschleife 😕



  • Du gehst das Problem falsch an!
    Denke erst mal darüber nach, was der Unterschied zwischen einem Zeichen und einer Ziffer ist. Wenn dir dazu nix einfällt, kannst du ja weiter fragen.



  • scanf mit %lf liest doch eh nur zahlen ein (in diesem fall double)



  • Also: Ziffern sind auch Zeichen! Wenn du dir mal eine ASCII-Tabelle anschaust, siehst du Buchstaben und Zahlen nebeneinander.
    Du musst also eine Zeichenkette einlesen und dann jedes Zeichen darauf prüfen, ob es zwischen '0' und '9' liegt (Bei Fließkommazahlen sollte man auch auf '.' bzw. ',' prüfen).



  • Schau dir mal die Funktion strtod an
    diese wandelt einen String in eine double zahl um. Im zweiten Parameter
    steht die Stelle an der die Konvertierung beendet wurde, zeigt diese nicht
    auf \0 ist ein nicht numerisches Zeichen im Eingabestring

    char* err;  
    double umwandlung;
    
    umwandlung = strtod( wert, &err );
    if ( *err != '\0' )  
      {  
      printf("Wert ist keine Zahl"};  
      }
    

    Zur selben Gruppe gehören auch strtol, stroul
    🙂



  • Entweder hast du zwei * zuviel, oder ein &. Ich weiß nicht, wie die Parameterliste von strtod aussieht, aber eines von beiden trifft zu.
    (die if abfrage darf auch ruhig if(err) bzw. if(*err) lauten, da '\0' == 0 ist)



  • Ich muß dich leider entäuschen, die
    von mir angegebene Konstruktion ist richtig.

    Probier mal diese beiden Beispiele mit einem Debugger aus und
    schau dir den Inhalt der Variablen an.

    {
    char* err;  
    double umwandlung;
    char wert[]={"1234"};
    umwandlung = strtod( wert, &err );
    if ( *err != '\0' )  
      printf("Wert ist keine Zahl");  
    }
    
    {
    char* err;  
    double umwandlung;
    char wert[]={"12A34"};
    umwandlung = strtod( wert, &err );
    if ( *err != '\0' )  
      printf("Wert ist keine Zahl");  
    }
    

Anmelden zum Antworten