schreibfunktionen



  • Hi,
    ich hab ein kleines Telefonbuch geschrieben, bei dem man so sachen wie vor- und nachnamen, telefonnummer etc. eingeben kann.
    zusätzlich habe ich eine Funktion geschrieben, die die Eingabe übernimmt:

    void cMenue::eingabe(char *result)
    {
        char CHTEMP;
        for ( int i=0 ; i<35 ; )
        {
            CHTEMP = getch();
            if ( (CHTEMP != 13) && (CHTEMP != 27 /* Escape*/) && (CHTEMP != 8 /*Backspace*/) )
            {
                *result = CHTEMP;
                ++result;
                cout<<CHTEMP;
                ++i;
            }
            else if (CHTEMP == 8 /*Backspace*/)
            {
                cout<<(char)8<<" "<<(char)8;
                if ( i>0 )
                {
                    --result;
                    --i;
                }
            }
            else
                break;
        };
    };
    

    nun wollte ich mal wissen, ob so eine ähnliche funktion schon existiert, ob das alles müll ist, oder ob man verbesserungen vornehmen kann...

    [ Dieser Beitrag wurde am 24.10.2002 um 12:04 Uhr von Fehler in Kernel32.dll editiert. ]
    so, noch`n fehler korrigiert 😉

    [ Dieser Beitrag wurde am 24.10.2002 um 12:06 Uhr von Fehler in Kernel32.dll editiert. ]



  • Wenn C++, dann bitte aber std::string und kein char*. Desweiteren sind in result nicht alle Zeichen sondern irgendwie nur das letzte gespeichert...

    In der FAQ findest du unter Reine Zahleneingaben eine ähnliche Funktion, sie liest nur Zahlen im Sinne von C oder eben C++ ein. Man kann erkennen wie solche Funktionen aufgebaut sind - auch lassen sich so die Unterschiede zwischen C und C++-Versionen ansehen.

    MfG SideWinder



  • sorry, mein fehler :
    ich hab vergessen zu erwähnen, dass char[35] uebergeben wird 😉
    dann werden also bis zu 35 Zeichen gespeichert...



  • Vergiss nicht, dass getch() immer diesen zweiten Wert bringt, wenn Sondertasten gedrückt werden.

    Eine richtig schöne Eingabefunktion hätte noch mehr Möglichkeiten:
    1. Mit dem Cursor hin und herlaufen, also editieren
    2. Umschaltung zwischen Einfügen und Überschreiben

    Dann die Möglichkeit, dass die Routine reentrant ist, d.h.
    die Routine kann verlassen werden (innerhalb einer GUI), weil der User gerade mal woanders hin klickt, oder andere Programmteile behandelt werden müssen.
    Die zwischenzeitliche Eingabe (und Cursorposition) bleibt aber stabil.
    Du kommst also wieder in die Routine rein, und alles bleibt beim alten.
    Du siehst also, es kann immer noch viel verbessert werden.



  • ja mit den pfeiltasten mal sehen... so wie ich das ganze aufgebaut habe wird das wohl etwas schwieriger ... aber das wird schon gehen...
    was meinst du mit

    Vergiss nicht, dass getch() immer diesen zweiten Wert bringt, wenn Sondertasten gedrückt werden.

    ? welcher zweite wert ?



  • Spiel mal ein wenig auf der Tastatur rum:

    int main(void)
    {
      int n;
      do
      {
        n = getch();
        cout << n << endl;
      } while (n!=27); // ESC beendet
      return 0;
    }
    

    Du wirst sehen, dass Du für viele 'Sondertasten' zwei Codes kriegst.
    Beim MSVC ist der erste dann 224, bei anderen Compilern 0.

    [ Dieser Beitrag wurde am 25.10.2002 um 15:58 Uhr von Bitsy editiert. ]



  • so guck grad mal wie das geht mit pfeiltasten und so (-->FAQ 😉 ) 🙂



  • Gute, nein, sehr gute Idee ;).

    MfG SideWinder


Anmelden zum Antworten