negative Zahlen einlesen



  • Moinsen Leutz,

    ich schreibe eine Funktion, in der Zahlen eingelesen werden.

    klappt alles wunderbar.

    nur bei Zahlen mit - (negative Zahlen) macht sie nichts richtig.
    ist das normal und/oder gibt es spezielle Funktionen für negative zahlen.

    Gruß



  • Zeigst du den Code? Meine Kristallkugel ist gerade in der Werkstatt.



  • hab sie für dich repariert:

    Es werde Licht im dunkeln-->

    int readint(char msg[], int lower, int upper)
    {
     int zahl, n,c,i;
     char temp[100]; 
       do
       {
          printf("%s", msg);
          n=scanf("%99s", temp); 
            for (i=0; i<strlen(temp); i++){ 
                if(!isdigit(temp[i]))
                 n=0; 
            }
            if (n==1)
                    zahl = atoi(temp);
           while (getchar() != '\n')
                ;
    
                      if (n != 1)
                       printf("\nEingabefehler!\n\n");
                      else if (zahl < lower)
                       {
                         printf("\nDer Wert muss groesser oder gleich %i sein!\n\n",
                         lower);
                         n = 0;
                       }
                       else if (zahl > upper)
                       {
                         printf("\nDer Wert muss kleiner oder gleich %i sein!\n\n",
                         upper);
                         n = 0;
                       }
      } while (n != 1);
    
     return zahl;
    


  • Hast du mal getestet, was isdigit('-') zurückgibt?

    P.S.:
    Du solltest an deiner Einrückung arbeiten 😉



  • Ähh,

    nö. und ich weiss auch nicht was du damit meinst. (SORRY!)

    das mit der einrückung sind individuelle Fähigkeiten einen Code zu lesen....nee, wohl doch eher anfängerfehler :p



  • Du rufst für jedes eingelesene Zeichen in temp isdigit auf. Wenn du eine negative Zahl eingibst, ist da ein Minuszeichen dabei. Das heißt, du rufst effektiv isdigit('-') auf. Und das ergibt 0, weil das Minuszeichen keine Ziffer ist. Dann setzt du n auf 0 und gibst "Eingabefehler" aus.



  • also kann ich es so nicht einfach ändern, wenn ich die bisherige Funktionalität beibehalten will??



  • if(!isdigit(temp[i]) && temp[i] != '-')
    

    Wörtlich:
    Wenn das Teil keine Zahl ist und auch kein Minuszeichen.



  • Wilmapower schrieb:

    also kann ich es so nicht einfach ändern, wenn ich die bisherige Funktionalität beibehalten will??

    einfach schauen ob das 1. Zeichen ein - oder + ist


Anmelden zum Antworten