Unterscheidung char, integer in der if schleife..?



  • hey,

    ich würde gerne nach einer eingabe durch den benutzer mittels if schleife überprüfen ,ob er einen buchstaben oder eine zahl eingegeben hat...

    und ggf. ne fehlermeldung ausgeben...

    wie aber verpack ich das in eine if schleife?

    if (eingabe = char)....?

    danke schonmal=) 🙄



  • ^^such mal nach 'isalpha', 'isdigit' usw.
    🙂



  • #include <stdio.h>
    #include <stdlib.h>
    #include <stdbool.h>
    
    // prüfen ob ein char eine zahl darstellt
    bool charPruefen(char c) {
      if(c > 47 && c < 58) {
        return true;
      }
      return false;
    }
    
    // prüfen ob ein string nur zahlen enthält
    bool stringPruefen(const char *ptr) {
      while(*ptr) {
        if(*ptr < 48 || *ptr > 57) {
          return false;
        }
        ptr++;
      }
      return true;
    }
    
    int main(void) {
      printf("%d\n",charPruefen('5'));
      printf("%d\n",charPruefen('i'));
      printf("%d\n",stringPruefen("1024"));
      printf("%d\n",stringPruefen("46hd838er"));
      return EXIT_SUCCESS;
    }
    

    PS:

    if schleife

    😕



  • http://www.if-schleife.de/

    Ravendark schrieb:

    einzelnen einzelnen char prüfen:

    bool charPruefen(char c) {
      if(c > 47 && c < 58) {
        return true;
      }
      return false;
    }
    

    string prüfen:

    bool stringPruefen(const char *ptr) {
      while(*ptr) {
        if(*ptr < 48 || *ptr > 57) {
          return false;
        }
        ptr++;
      }
      return true;
    }
    

    ne 👎. Zum einen sollte man anstelle if(a) return true; else return false; lieber return a; schreiben und zum anderen solltest du nicht einfach magische Konstanten in deinen Code schreiben!

    Lieber man: isdigit und man: isalpha nutzen, wie ~frickels vorgeschlagen hat.



  • if(a) return true; else return false; lieber return a;
    

    warum sollte ich a zurückgeben?

    Lieber isdigit und isalpha nutzen, wie ~frickels vorgeschlagen hat.

    stimmt schon,
    ich hab halt früher solche probleme selbst probiert zu lösen in dem ich mir selber funktionen/prodzeduren geschrieben hab 😉

    mhh, hat sich bei mir irgendwie eingebürgert das ich statt return 0 immer return EXIT_SUCCESS schreibe ^^



  • Ravendark schrieb:

    if(a) return true; else return false; lieber return a;
    

    warum sollte ich a zurückgeben?

    Wenn a true ist, gibst du true zurück. Wenn a false ist, gibst du false zurück. Dann kannst du auch gleich a selbst zurückgeben, und sparst dir das if.



  • Ravendark schrieb:

    if(a) return true; else return false; lieber return a;
    

    warum sollte ich a zurückgeben?

    'a' steht für den vergleich im 'if', also z.b:

    return (c > 47 && c < 58);
    

    gibt 0 oder 1 zurück.
    🙂



  • Wenn a true ist, gibst du true zurück. Wenn a false ist, gibst du false zurück. Dann kannst du auch gleich a selbst zurückgeben, und sparst dir das if.

    stimmt schon,
    aber ich hab doch eine boolean-funktion, also muss ich ja auch einen bool-schen wert (also 0 oder 1) zurückgeben...

    EDIT: thx an ~fricky, stand gerade auf dem schlauch 😃 ...klar dann kann ich mir die if-abfrage sparen:

    bool pruefeChar(char c) {
      return c > 47 && x < 58;
    }
    


  • Ravendark schrieb:

    aber ich hab doch eine boolean-funktion, also muss ich ja auch einen bool-schen wert (also 0 oder 1) zurückgeben...

    das ergebnis des vergleichs ist doch schon 0 oder 1.
    🙂



  • Ravendark schrieb:

    aber ich hab doch eine boolean-funktion, also muss ich ja auch einen bool-schen wert (also 0 oder 1) zurückgeben...

    Und was ergibt der Ausdruck c > 47 && c < 58?



  • lass dich nich lumpen von den selbsternannten experten hier, jeder bessere compiler aus'm kaugummi automat für 10cent macht daraus eh den gleichen code. wenn du deinen übersichtlicher findest, dann lass ihn ruhig so 🙂



  • okay...danke schonmal für die schnellen antworten:)

    ich mach mich jetzt mal ans lesen und probieren..

    🙂



  • helfer1ein schrieb:

    jeder bessere compiler aus'm kaugummi automat für 10cent macht daraus eh den gleichen code.

    darum gehts doch nicht, sondern darum, dass man redundanten quelltext besser vermeiden sollte. würdes du z.b. sowas machen?

    int gimme_two (int a)
    {
      if (a == 2)
        return a;
      else
        return 2;
    }
    

    🙂



  • man muss code nicht bis zur unleserlichkeit kompaktieren, nur weil es geht



  • helfer1ein schrieb:

    man muss code nicht bis zur unleserlichkeit kompaktieren, nur weil es geht

    Redundanter Quellcode ist eine mögliche Quelle von Bugs, das hat erstmal nichts mit "Unlerserlichkeit" oder sowas zu tun, sondern mit Codequalität.



  • Quatsch mit Soße. Guter Quellcode ist leicht verständlicher Quellcode, nicht irgendein kryptischer Zeichensalat. Nur weil man in C programmieren kann wie ein Roboter auf Speed, heißt das nicht, daß man dies tun sollte! Diese Hacker-Ethik ist seit 30 Jahren out.



  • helfer1ein schrieb:

    Guter Quellcode ist leicht verständlicher Quellcode, nicht irgendein kryptischer Zeichensalat.

    richtig, aber völlig überflüssiger quellcode ist schlechter quellcode. die realitätsfernen freaks aus dem c++-forum hätten die frage des op vielleicht mit klassen, iteratoren, stringstream und schön viel std:: darin gelöst (ausser volkard, er ist der einzige mit weitblick, der sich da rumtreibt). aber wie's so treffend heisst: 'die dümmsten programmierer schreiben die dicksten programme'.
    🙂



  • helfer1ein schrieb:

    Guter Quellcode ist leicht verständlicher Quellcode, nicht irgendein kryptischer Zeichensalat.

    a)

    bool charPruefen(char c) {
      if(c > 47 && c < 58) {
        return true;
      }
      return false;
    }
    

    b)

    bool pruefeChar(char c) {
      return c > 47 && x < 58;
    }
    

    Alles was in b) steht, findet man auch in a). Wie also kann b) kryptisch sein, a) aber nicht? Erklär mal bitte 🙂



  • ~fricky schrieb:

    die realitätsfernen freaks aus dem c++-forum hätten die frage des op vielleicht mit klassen, iteratoren, stringstream und schön viel std:: darin gelöst (ausser volkard, er ist der einzige mit weitblick, der sich da rumtreibt). aber wie's so treffend heisst: 'die dümmsten programmierer schreiben die dicksten programme'.

    oh mann. man darf ja ruhig eine programmiersprache nicht mögen und das auch sagen, aber was sollen denn dieses ständige sinn-, grund- und hirnlose bashing, die provokationen und beleidigungen bringen? scheint ja schon zwanghaft zu sein bei dir.
    es wissen alle über deine meinung bescheid, keinen interessierts, also klappe zu. bitte.



  • ʎʞ& schrieb:

    ~fricky schrieb:

    die realitätsfernen freaks aus dem c++-forum hätten die frage des op vielleicht mit klassen, iteratoren, stringstream und schön viel std:: darin gelöst (ausser volkard, er ist der einzige mit weitblick, der sich da rumtreibt). aber wie's so treffend heisst: 'die dümmsten programmierer schreiben die dicksten programme'.

    oh mann. man darf ja ruhig eine programmiersprache nicht mögen und das auch sagen, aber was sollen denn dieses ständige sinn-, grund- und hirnlose bashing, die provokationen und beleidigungen bringen?

    ok, tut mir leid. ich habe überreagiert. das lag daran, dass ich vorhin im c++ forum zwei haarsträubende threads gelesen habe. ich sollte besser einen grossen bogen um das c++ unterforum machen.
    🙂


Anmelden zum Antworten