abfrage einer eingabe ob Zahl oder buchstabe



  • hallo,

    ich versuche ein programm zu schreiben, welches die eingabe überprüft und je nachdem ob zahl oder buchstabe eine berechnung oder printf("Es ist keine reine zahl"); ausgibt.

    so sieht es momentan aus:

    //Umrechnung Sekunden
    
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
      int gesamtsekunden, jahre, tage, stunden, minuten, sekunden;
      int *zeiger = 0;
    
      printf("Dieses Programm teilt die eingegebene Zahl in Jahre, Tage, Stunden, Minuten und Sekunden auf. \n");
      printf("Bitte jetzt die Anzahl der Sekunden eingeben und mit [Enter] bestaetigen! \n\n");
    
      printf("--------------------------------------\n");
      printf("Eingabe: ");
      scanf("%s", &gesamtsekunden);
      zeiger = &gesamtsekunden;
    
      if(sscanf(zeiger, "%d", &gesamtsekunden))
    
                    printf("\n--------------------------------------\n\n");                 
    
      else
                    printf("\nEs ist keine \"reine\" Zahl!\n\n");
    
      system("PAUSE");	
      return 0;
    }
    

    Soweit scheint es zu funktionieren, wenn der GANZE eingegebene wert ein buchstabe oder zahl ist.
    sobald aber z.B. 3423ddhf steht, wird es als "zahl" erkannt.

    auch funktioniert die gesamte abfrage nicht richtig, wenn ich die geplante berechnung einfüge.
    also so:

    //Umrechnung Sekunden
    
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
      int gesamtsekunden, jahre, tage, stunden, minuten, sekunden;
      int *zeiger = 0;
    
      printf("Dieses Programm teilt die eingegebene Zahl in Jahre, Tage, Stunden, Minuten und Sekunden auf. \n");
      printf("Bitte jetzt die Anzahl der Sekunden eingeben und mit [Enter] bestaetigen! \n\n");
    
      printf("--------------------------------------\n");
      printf("Eingabe: ");
      scanf("%s", &gesamtsekunden);
      zeiger = &gesamtsekunden;
    
      if(sscanf(zeiger, "%d", &gesamtsekunden))
    
                    jahre = gesamtsekunden/31536000;
                    tage = (gesamtsekunden%31536000)/86400;
                    stunden = ((gesamtsekunden%31536000)%86400)/3600;
                    minuten = (((gesamtsekunden%31536000)%86400)%3600)/60;
                    sekunden = (((gesamtsekunden%31536000)%86400)%3600)%60;
    
                    printf ("\n%d Sekunden sind: ", gesamtsekunden);
                    printf("\n--------------------------------------\n\n"); 
    
                    if (jahre == 0) printf ("");
                    if (jahre == 1) printf ("%d Jahr \n", jahre);
                    if (jahre > 1) printf ("%d Jahre \n", jahre);
    
                    if (tage == 0) printf ("");
                    if (tage == 1) printf ("%d Tag \n", tage);
                    if (tage > 1) printf ("%d Tage \n", tage);
    
                    if (stunden == 0) printf ("");
                    if (stunden == 1) printf ("%d Stunde \n", stunden);
                    if (stunden > 1) printf ("%d Stunden \n", stunden);
    
                    if (minuten == 0) printf ("");
                    if (minuten == 1) printf ("%d Minute \n", minuten);
                    if (minuten > 1) printf ("%d Minuten \n", minuten);
    
                    if (sekunden == 0) printf ("0 Sekunden \n\n");
                    if (sekunden == 1) printf ("%d Sekunde \n\n", sekunden);
                    if (sekunden > 1) printf ("%d Sekunden \n\n", sekunden);
    
      else
                    printf("\nEs ist keine \"reine\" Zahl!\n\n");
    
      system("PAUSE");	
      return 0;
    }
    

    ich würde mich sehr freuen, wenn mir hier jemand helfen könnte.

    gruß
    Roman



  • Zur Not kannst du in einer Schleife jeden char darauf prüfen, ob er zwischen 48 und 57 oder ein Dezimal-/Tausendertrennzeichen ist. Vielleicht gibt's auch bessere Lösungen...



  • hm, das hatte ich mir auch schon überlegt.
    ist denn die methode mit der ich es versucht habe generell unbrauchbar ?





  • 😕

    Ja aber...

    char s[]="123xxx";
    long l=strtol(s,0,10);  //...er erfährt hier doch nicht, ob im String noch zahlenfremde Zeichen (xxx) waren, was sein erklärtes Ziel ist...
    


  • _matze schrieb:

    😕

    Ja aber...

    char s[]="123xxx";
    long l=strtol(s,0,10);  //...er erfährt hier doch nicht, ob im String noch zahlenfremde Zeichen (xxx) waren, was sein erklärtes Ziel ist...
    

    doch

    char s[]="123xxx", *endptr;
    long l = strtol(s, &endptr, 0);
    if(*endptr != 0) {
       /* neben Zahlen gibt es zahlenfremde Zeichen */
       ...
    }
    

Anmelden zum Antworten