Warum kein Funktionsaufruf? [gelöst]



  • hi,

    folgendes kleines Problem: Ich möchte ein beliebiges einzugebendes Zeichen darauf prüfen ob es eine Zahl ist. Dazu wandle ich das eingegebene Char in ein Int um und vergleiche die Int-Zahl mit der ASCII-Tabelle. So sollte das eigentlich gehen, denke ich, aber wie es scheint wird die Funktion "isdigit" nicht durchlaufen, da die darin enthaltene Ausgabe mit cout nicht erscheint.

    char wunschzeichen;
     int test;
    
     cin  >> wunschzeichen;
     test=wunschzeichen;
    
     if(isdigit(test)==true)
     	cout << "Du hast eine Zahl eingegeben." << endl;
     }
    
     bool isdigit(char ch)
     {
     cout << "Diese Funktion wird durchlaufen." << endl;
     if(ch >= 48 && ch <= 57) 
     	return true;
     else 
     	return false;
     };
    

    Woran könnte das liegen?

    Tom



  • Warum liest du einen char ein, den du in int umwandelst, um dann den int einer Funktion zu übergeben, die ein char will? O.o

    Achso, zu dem Problem:
    Es ist keines. Die Funktion isdigit() existiert schon in der C++ Standard Library, darum wird nicht deine Funktion aufgerufen. Nenn sie um und es funktioniert auch mit deiner Funktion.



  • ups. hast rest, müsste so aussehen:

    bool isdigit(int ch)
    

    der wert wird woanders als char weiter verarbeitet, hier brauch ich aber den int. nun sagt der compiler das:

    /home/thomasle/kdevelop/ue_23/src/ue_23.cpp:30: error: new declaration `bool isdigit(int)'
    /usr/include/ctype.h:105: error: ambiguates old declaration `int isdigit(int)'
    

    jetzt weiss ich wirklich nicht was er von mir will... 😕

    tom



  • int isdigit( 
       int c 
    );
    int iswdigit( 
       wint_t c 
    );
    

    Die sind schon in der C++ Standard Library drin. (siehe Link oben)

    Überladen funktioniert nur über unterschiedliche Übergabe, aber nicht Rückgabe-Parameter.
    Das geht:

    bool isdigit(int c);
    bool isdigit(char c);
    

    Das geht nicht:

    bool isdigit(int c);
    int isdigit(int c);
    

    Woher soll der Compiler denn Wissen welche Funktion er nehmen soll?



  • hhm, wusst ich nicht dass sie in der standard-bibliothek ist, hab deinen edit auch erst danach gelesen... 🙄

    nun hab ichs so und sie wird trotzdem durchlaufen:

    bool isdigit(char eingabe)
    

    aber wenn sie doch in der standard-bibliothek ist, (typ bool), müsste ich sie doch gar nicht erst in mein programm rein nehmen müssen, sondern auch einfach so aufrufen können und den rückgabewert von weiter verarbeiten, theoretisch... praktisch mag das jedoch nicht, nur warum?

    tom



  • tomcat22 schrieb:

    aber wenn sie doch in der standard-bibliothek ist, (typ bool), müsste ich sie doch gar nicht erst in mein programm rein nehmen müssen, sondern auch einfach so aufrufen können und den rückgabewert von weiter verarbeiten, theoretisch... praktisch mag das jedoch nicht, nur warum?

    tom

    Herrschaftsseiten. Ich kann jetzt nur raten was du gerade gefragt hast.

    Ich glaube du meinstest:
    "Aber wenn die Funktion doch in der Standard-Bibliothek ist und bool zurückgibt, dann müsste ich sie doch gar nicht erst in für mein Programm schreiben. Ich könnte doch auch einfach aufrufen und ihren Rückgabewert weiter verarbeiten. Zumindest theoretisch. .... "
    Den letzten Satz hab ich garnicht verstanden...
    Falls die Vermutung über die Aussage richtig ist:

    isdigit liefert einen int zurück.
    Der Rückgabewert ist 0 wenn das Zeichen nicht zwischen 0-9 ist. Du bekommst einen Wert ungleich 0 sollte das Zeichen zwischen 0-9 liegen.
    Ja, die Funktion kannst du in deinem Quelltext einfach so einfügen.
    true ist alles ungleich 0
    false ist gleich 0



  • du hast mich doch ganz richtig verstanden und auch genau das geantwortet was ich wissen wollte... *freu*

    danke! 😃

    tom


Anmelden zum Antworten