Umlaute in C++ auf Dos Konsulen anwendung



  • Kritik ist meistens kritisch ;).

    Defines und C++ - nicht so gut.
    Dann würde ich ihnen lieber explizit die Zahlen zuweisen die für den Code stehen, als diese Kürzel wie TM oder so.

    Ist eine solche Kritik kritisch oder nicht? *g*

    MfG SideWinder



  • kritik ist immer kritisch? jo das stimmt 😉 😉
    kritisch genug ist ja die kritik 😃

    thx. bin halt kein c++ programmierer. ich hab c so gerne. ursprünglich war der code ja c und hab ich nur mal schnell überflogen um das cout reinzubringen.



  • kannst natürlich auch mit printf arbeiten 😉

    printf("%cbung",220);



  • HI Leute,
    danke für die ganzen Tipps.
    Ich glaube ich hab mein Problem aber nicht richtig beschrieben,
    das Printf oder auch cout mit ascii werten arbeiten kann ist mir bekannt gewesen, mein problem ist eher das ich etwas suche was mehr dem motto what you see is what you get das soll heisen ich möchte in printf wirklich Umlaute eintragen können und die im Compiler auch sehen um später wenn das Programm läuft auch diese dann aus gegeben zu bekommen.
    als bsp:

    int main ()
    {
    printf(" Schöner Tag noch und viel Spaß\n");
    return 0;
    }
    um dann auf den Bildschirm zu sehen

    Schöner Tag und noch viel Spaß

    Irgend einer eine Idee ?

    😕
    mfg Alex



  • hmm...

    du schreibst ne funktion namens gprintf();
    gprintf konvertiert die umlaute, und übergibt dann den konvertierten text an die funktion printf(); weiter.

    der kannst du deinen text übergeben gprintf("Schönen Tag noch und viel Spaß\n");

    wüsste jetzt sonst nicht, wie du printf(); begreiflich machen könntest das es dt. umlaute gibt. dann müsste printf(); ja auch alle anderen sprachzeichen verstehen. wie zb. die chinesischen schriftzeichen. um das problem zu lösen erfand man ja auch Unicode. nur ist das nicht auf allen windowssystemen so implementiert wie in der nt-linie.

    und das g in gprintf stört ja nicht wirklich oder?



  • Hi,
    versuch mal, in deinem Editor den Umlaut so einzugeben:

    Alt + Auf dem Zahlenpad deiner Tastatur: 0148

    0148 ist der ASCII-Code für "ö"
    Bei mir klappt es so.



  • dann steht bei dir wirklich das ö?
    bei mir steht dann ”.
    und das verwendet die funktion GermanCodes. du musst also diese kombination nicht auswendig können.



  • In meinem Quellcode steht freilich auch ´´
    aber in dem kompilierten Programm steht dann schon "ö"
    klappt es bei dir nicht?



  • Jo, sollte im compilierten Code schon stehen :).

    Seht euch mal folgendes an:

    // umlautbuf.h
    #ifndef UMLAUTBUF_H__INCLUDED
    #define UMLAUTBUF_H__INCLUDED
    
    #include <iostream>
    
    #ifdef _MSC_VER
    #define HAS_CHAR_TRAITS
    #endif
    
    #ifndef HAS_CHAR_TRAITS
    #define int_type int
    const int_type GEN_EOF = EOF;
    #endif
    
    class umlautbuf : public std::streambuf
    {
        public:    
            umlautbuf ( std::streambuf* sb );
            int_type overflow(int_type c);
            #ifdef HAS_CHAR_TRAITS
            typedef std::streambuf::traits_type traits_type;
            #endif
    
        private:
            std::streambuf* m_Buffer;
            umlautbuf( const umlautbuf& );
            umlautbuf& operator= (const umlautbuf& );
    };
    
    // Kleine Resource-Aquisition-is-initialization-Klasse
    // die dafür sorgt, dass auch im Falle von Exceptions alles
    // schön wiederhergestellt und gelöscht wird
    class AutoUmlautBuffer
    {
        public:
            AutoUmlautBuffer(std::ostream& os) :
                m_Os(os),
                m_OldBuf(os.rdbuf()),
                m_NewBuf(new umlautbuf(m_OldBuf))
            {  
                os.rdbuf(m_NewBuf);
            }
            ~AutoUmlautBuffer()
            {
                m_Os.rdbuf(m_OldBuf);
                delete m_NewBuf;
            }
        private:
            std::ostream& m_Os;
            std::streambuf* m_OldBuf;
            std::streambuf* m_NewBuf;
    };
    
    #endif
    
    // umlautbuf.cpp
    
    #include "umlautbuf.h"
    #ifdef HAS_CHAR_TRAITS
    typedef umlautbuf::traits_type::int_type int_type;
    #endif
    using namespace std;
    
    umlautbuf::umlautbuf ( streambuf* sb ) : m_Buffer(sb) {}
    
    int_type umlautbuf::overflow(int_type c)
    {
        #ifdef HAS_CHAR_TRAITS
        if (!traits_type::eq_int_type(c, traits_type::eof()))
        #else
        if (c != GEN_EOF)
        #endif
        {
            #ifdef HAS_CHAR_TRAITS
            traits_type::char_type Temp = c;
            #else
            char Temp = c;  // oder unsigned char?
            #endif
            switch(Temp)
            {
                case 'Ä' : c = 142; break;
                case 'ä' : c = 132; break;
                case 'Ö' : c = 153; break;
                case 'ö' : c = 148; break;
                case 'Ü' : c = 154; break;
                case 'ü' : c = 129; break;
                case 'ß' : c = 225; break;
                default: break;
    
            }
            #ifdef HAS_CHAR_TRAITS
            if ( traits_type::eq_int_type(m_Buffer->sputc(c), traits_type::eof()))
                return traits_type::eof();
            #else
            if (m_Buffer->sputc(c) == GEN_EOF)
                return GEN_EOF;
            #endif
        }
        #ifdef HAS_CHAR_TRAITS
        return traits_type::not_eof(c);
        #else
        return int_type(c);
        #endif
    }
    
    // main.cpp
    #include "umlautbuf.h"
    using namespace std;
    int main()
    {
        AutoUmlautBuffer p(cout);
        cout << "Äh Hallo" << endl;
    }
    

    Schöne Grüße von Hume :).

    MfG SideWinder



  • sorry hab gedacht durch diese tastenkombination würde dann ö im editor stehen. das es im kompilierten programm dann ist, ist mir schon klar (sonst würde GermanCodes() net funktionieren :D)

    jepp der code von hume ist net schlecht. jetzt muss ich nichtmal mehr die funktion GermanCodes() aufrufen um dt. Umlaute auszugeben.

    falls ich mal irgendwann anfange c++ zu verwenden ist es bestimmt interessant :D:D:D


Anmelden zum Antworten