eine eingabefunktion für verschiedene datentypen



  • Hallo,

    ich habe mich gefragt wie ich am intelligensten eine Funktion schreibe mit der ich sowohl, float / double als auch int bzw. chars einlesen kann, quasi jeden Datentypen.

    Aufrufen würde ich die Funktion einfach über

    eingabe(&variable);
    

    an sich stellt sich mir die Frage wie ich das einlesen gestalte, da scanf ja eine Datentypangabe erwartet. kann ich aus der übergebenen Adresse den Datentypen rauskriegen?!

    void eingabe(void *var)
    {
    scanf(" %[c]TYP[/c]",var);
    return;
    }
    

    Freu mich über jede Antwort. Vielleicht klappt das mit einer anderen Funktion um einiges besser?!



  • Also Du könntest einen String einlesen (klappt immer) und dann mittels der Pappenheimer atoi und Konsorten den Inhalt klassifizieren.
    Aber die ohnehin schwache Typisierung bei C aufzuheben macht keinen echten Sinn, performant wird's sowieso nicht. Du willst Dir eine Art smartscanf() zusammenbasteln, das zieht einen Rattenschwanz von casts nach sich, also ich für meinen Teil würde sowas nicht in Angriff nehmen wg. Verdachts auf groben Unfug. 😉



  • verdacht auf groben Unfug?! 😃 Sorry, ich weiß ehrlich nicht worauf du hinaus willst 😉

    aber ich habe schon befürchtet, dass ich nicht um strings und elend viele casts usw. herumkomme und zulangsam sollte die Funktion natürlich auch nicht werden...



  • chmbw schrieb:

    verdacht auf groben Unfug?! 😃 Sorry, ich weiß ehrlich nicht worauf du hinaus willst 😉

    schwache Typisierung ist einer der Vorteile aber zugleich Nachteile von C, insbesondere, weil man sehr viele Fehler macht, wenn man nicht aufpasst.

    Ich rate immer davon ab, scanf überhaupt zu verwenden, meiner Meinung nach macht es nur Ärger. Deshalb sollte man lieber nur mit fgets lesen und mit man: strtoul(3) bzw. man: strtod(3), und wenn es sein muss, dann sscanf nehmen.



  • Erstmal herzlichen Dank für eure Antworten. Ja, ich weiß, dass scanf sehr unsicher ist. Allerdings hatte ich mich gefragt ob es eine Möglichkeit gibt das ohne Strings zu machen, da ich dafür ja dann wieder n char array brauche etc. etc., ich nicht immer weiß wie groß es maximal sein muss usw. Ich hatte an eine kleine kompakte "universal-eingabe-funktion" gedacht 😉



  • chmbw schrieb:

    Erstmal herzlichen Dank für eure Antworten. Ja, ich weiß, dass scanf sehr unsicher ist. Allerdings hatte ich mich gefragt ob es eine Möglichkeit gibt das ohne Strings zu machen, da ich dafür ja dann wieder n char array brauche etc. etc., ich nicht immer weiß wie groß es maximal sein muss usw. Ich hatte an eine kleine kompakte "universal-eingabe-funktion" gedacht 😉

    Dann musst du nach C++ wechseln:

    Typ blub;
    std::cin >> blub;
    

Anmelden zum Antworten