Anzeige:
Ergebnis 1 bis 8 von 8

Thema: C: Float Variable nach dder Eingabe überprüfen

  1. #1
    Registrierter Benutzer Avatar von roadracer
    Registriert seit
    16.02.2010
    Ort
    Wolfenbüttel
    Beiträge
    48

    C: Float Variable nach dder Eingabe überprüfen

    Hallo,
    wie kann man prüfen, ob der Benutzer eine gültige Eingabe für eine float Variable gemacht hat? Also, dass er, wenn er z.B Buchstaben, Rechenzeichen, ..., eingegeben hat eine Fehlermeldung bekommt. Bei int Variablen ist da ja noch mehr oder weniger einfach aber bei float Variablen gibt's ja noch den Punkt.

    VG
    OpenSUSE 12.1 x86 KDE 4.7

    Alle Rechtschreibfehler unterliegen der GFDL und dürfen so oder in veränderter Form genutzt und weiter gegeben werden.

  2. #2
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    Code:
    char *end;
    double value = strtod(input, &end);
    if ( *end == '\0' )
    {
        printf("value = %g\n", value);
    }
    else
    {
        printf("failed to convert %s\n", text[i]);
    }
    schau dir auch noch die manpage für strtod (man 3 strtod: http://linux.die.net/man/3/strtod) an.
    my very own 128 bit integer
    C4 D3 B8 A8 9E A0 C6 EC 7D EC A8 15 28 D1 92 58
    more information

  3. #3
    Registrierter Benutzer Avatar von roadracer
    Registriert seit
    16.02.2010
    Ort
    Wolfenbüttel
    Beiträge
    48
    Irgendwie bin ich zu dumm.
    ich hab' das jetzt mal so in einer funktion realisiert:
    Code:
    float convert (char *s) {
      float f = strtof (s, NULL);
      if (s == "\0") {
        printf ("Ungültige Eingabe. Es sind nur die Ziffern 0-9 und . erlaubt!\n");
        exit (1);
      }
      return f;
    }
    Sie soll aufgerufen werden über
    Code:
    float convert (char s)
    Müssete es nicht
    Code:
    float convert (char &s)
    heißen? Aber das funktioniert noch weniger.

    2 Probleme habe ich nun. 1. Wenn ich irgendwas mit einer Zahl vorne eingebe, also z.B 6df, dann mach der den float Wert 6.00000 daraus. 2. Es kommt nie eine Fehlermeldung.
    OpenSUSE 12.1 x86 KDE 4.7

    Alle Rechtschreibfehler unterliegen der GFDL und dürfen so oder in veränderter Form genutzt und weiter gegeben werden.

  4. #4
    Registrierter Benutzer Avatar von roadracer
    Registriert seit
    16.02.2010
    Ort
    Wolfenbüttel
    Beiträge
    48
    Code:
    float convert (char s[]) {
      char *end;
      float f = strtof (s, &end);
      if (strlen (end) >= 2 ) {
        printf ("Ungültige Eingabe. Es sind nur die Ziffern 0-9 und . erlaubt!\n");
        exit (1);
      }
      return f;
    }
    So muss das korrekt aussehen!
    OpenSUSE 12.1 x86 KDE 4.7

    Alle Rechtschreibfehler unterliegen der GFDL und dürfen so oder in veränderter Form genutzt und weiter gegeben werden.

  5. #5
    Registrierter Benutzer Avatar von roadracer
    Registriert seit
    16.02.2010
    Ort
    Wolfenbüttel
    Beiträge
    48
    So weit so gut, aber jetzt möchte ich das auch noch mit einer Intger-Variable machen, die auch negativ sein können müsste. Immer eine positive zu erhalten habe ich schon so realisiert:
    Code:
    int chartoint (char s[]) {
      size_t str_leng = (strlen (s))-2;
      int c;
      for (c = 0; c <= str_leng; c++) {
        if (isdigit (s[c]) == 0) {
          printf ("Ungültige Eingabe. Es sind nur die Ziffern 0-9 erlaubt!\n");
          exit (1);
        }
      }
      int i = atoi (s);
      return i;
    }
    Nur mit der "Negativ"-Variante habe ich noch so meine Probleme.
    Code:
    int chartoint (char s[]) {
      size_t str_leng = (strlen (s))-2;
      _Bool negative = 0;
      int c;
      if (s[0] == '-') {
        negative = 1;
        s[0] = 0;
        for (c = 1; c <= str_leng; c++) {
          if (isdigit (s[c]) == 0) {
        printf ("Ungültige Eingabe. Es sind nur die Ziffern 0-9, - und + erlaubt!\n");
        exit (1);
          }
        }
      }
      if (s[0] == '+') {
        s[0] = 0;
        for (c = 1; c <= str_leng; c++) {
          if (isdigit (s[c]) == 0) {
        printf ("Ungültige Eingabe. Es sind nur die Ziffern 0-9, - und + erlaubt!\n");
        exit (1);
          }
        }
      }
      else {
        for (c = 0; c <= str_leng; c++) {
          if (isdigit (s[c]) == 0) {
        printf ("Ungültige Eingabe. Es sind nur die Ziffern 0-9, - und + erlaubt!\n");
        exit (1);
          }
        }
      }
      int i = atoi (s);
      if (negative == 1)
        return -i;
      else
        return i;
    }
    Die Bedingung
    Code:
    if (s[0] == '-')
    erkennt das - einfach nicht. Wenn ich ein
    Code:
    printf ("%c\n", s[0]);
    davor einbaue ist das - aber in s[0] vorhanden.

    Was mache ich falsch???
    OpenSUSE 12.1 x86 KDE 4.7

    Alle Rechtschreibfehler unterliegen der GFDL und dürfen so oder in veränderter Form genutzt und weiter gegeben werden.

  6. #6
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    my very own 128 bit integer
    C4 D3 B8 A8 9E A0 C6 EC 7D EC A8 15 28 D1 92 58
    more information

  7. #7
    Registrierter Benutzer Avatar von roadracer
    Registriert seit
    16.02.2010
    Ort
    Wolfenbüttel
    Beiträge
    48
    was mich daran etwas verwirrt ist der Parameter
    Code:
    int base
    was soll ich da eintragen? 10?

    VG
    OpenSUSE 12.1 x86 KDE 4.7

    Alle Rechtschreibfehler unterliegen der GFDL und dürfen so oder in veränderter Form genutzt und weiter gegeben werden.

  8. #8
    Registrierter Benutzer Avatar von John W
    Registriert seit
    29.01.2010
    Beiträge
    211
    ja, 10.
    16 wäre Hexadezimalsystem, 2 Binärsystem.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •