Problem mit Programm



  • Du kannst mit dem DOS-Editor eine Datei erstellen:
    c:\>edit test.txt
    Alle benötigten Umlaute und weitere Zeichen eintippen, Datei speichern und im Windows-Editor öffnen. Die seltsamen Zeichen dann immer mit Strg-C und Strg-V an die entsprechenden stellen kopieren.

    #include <iostream>
    using namespace std;
    
    int main ()
    {
    	cout << "AE ae OE oe UE ue ss" << endl;
    	cout << "Ž  „  ™  ”  š    á" << endl;
    }
    

    Oder Escape-Sequenzen verwenden und die Zeichen anhand ihres Codes eingeben. Wobei du hier ein Wort nicht immer zusammenhängend zwischen zwei Anführungsstrichen schreiben kannst weil der Zeichencode sich mit nachfolgenden Zeichen "beißt", z.B. wenn du "Öa" eingeben willst und es mit "\x99a" versuchst weiß der Compiler ja nicht, dass er nach der Hex-Zahl 99 aufhören kann sondern würde 99a als eine viel zu große Hex-Zahl interpretieren, daher muss das Zeichen dann gesondert ausgegeben werden.

    #include <iostream>
    using namespace std;
    
    int main ()
    {
    	cout << hex;
    	for (unsigned char c=0; c < 255 ; ++c)
    		cout << (int) c << ": " << c << endl;
    
    	cout << "\x8e" << endl;
    	cout << "\x84" << endl;
    
    	cout << "\x99" << endl;
    	cout << "\x94" << endl;
    
    	cout << "\x9a" << endl;
    	cout << "\x81" << endl;
    
    	cout << "\xe1" << endl;
    
    	cout << "Hall" << "\x94" << "\x94" << "chen" << endl;
    }
    


  • Wenn du die Sonderzeichen verwenden willst, solltest du Konstanten deklarieren:

    const unsigned char oe = 148;
    
    cout << "Ein sch" << oe << "ner Tag heute.";
    

    Die Nummer für das jeweilige Sonderzeichen findest du im ASCII-Code: http://users.physik.fu-berlin.de/~goerz/blog/wp-content/uploads/2008/09/ascii.gif



  • SissiG schrieb:

    Du kannst mit dem DOS-Editor eine Datei erstellen:
    c:\>edit test.txt
    Alle benötigten Umlaute und weitere Zeichen eintippen, Datei speichern und im Windows-Editor öffnen. Die seltsamen Zeichen dann immer mit Strg-C und Strg-V an die entsprechenden stellen kopieren.

    #include <iostream>
    using namespace std;
    
    int main ()
    {
    	cout << "AE ae OE oe UE ue ss" << endl;
    	cout << "Ž  „  ™  ”  š    á" << endl;
    }
    

    Das ist ja wohl der letzte Dreck. Sowas kann nur von einem Sissiboy kommen.

    Console.WriteLine(User.Name.Replace("Darth", "Halt's"));
    


  • Dann sag ich es mal wie die Esoteriker: Wer heilt hat Recht.
    Oder übersetzt: Wenn's funktioniert stell ich keine Fragen.



  • Ja, genau! Lasst uns alle Frickelcode schreiben und auf anständigen Programmierstil verzichten! Hauptsache es funktioniert.



  • Hört doch auf zu streiten. Ihr habt mir alle sehr geholfen. Ich nehme wohl die Version von AirFranceler, weil man den Code des zeichens da bloß einmal festlegen muss und nicht jedesmal nachzugucken braucht.



  • Jetzt hab ich schon wieder ein neues Problem. Und zwar wollte ich einen Text ausgeben und da kommt mein Name drin vor und ich würd meinen Namen gern in Pink schreiben. Geht sowas?



  • Jenny86 schrieb:

    Jetzt hab ich schon wieder ein neues Problem. Und zwar wollte ich einen Text ausgeben und da kommt mein Name drin vor und ich würd meinen Namen gern in Pink schreiben. Geht sowas?

    http://msdn.microsoft.com/en-us/library/ms686047(VS.85).aspx

    arbeite dich da mal durch... falls es Unklarheiten gibt, kannst du hier im Winapi-Forum genauer nachfragen (bitte nicht hier im Thread. Es handelt sich hier nicht um reines C++ und der Thread wird sonst zu unübersichtlich)

    Grob so:

    int main()
    {
       SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0); // statt der 0 einfach eine Zahl zw. 0 und 15 für die Farbe angeben
    
       std::cout << "Dein Name" << std::endl;
    }
    


  • Jenny86 schrieb:

    Jetzt hab ich schon wieder ein neues Problem. Und zwar wollte ich einen Text ausgeben und da kommt mein Name drin vor und ich würd meinen Namen gern in Pink schreiben. Geht sowas?

    Nicht mit ANSI C++, nach deinen Fragen zu urteilen solltest du eh eher in das "DOS und Win32-Konsole"-Unterforum wechseln.

    Davon abgesehen:
    a) Bitte zumindestens kurz prüfen ob deine Frage schon gestellt wurde (Farben waren erst vor kurzen ein Thema). Hierzu ist auch die FAQ (in deinen Fall wohl vor allem die FAQ vom "C++" und vom "DOS und Win32-Konsole" Forum passend, die man auch über einen Link oben rechts leicht finden wird).
    b) Prüfen ob deine Frage wirklich in das jeweilige Forum passt
    c) 1 Thread pro Frage
    d) Sinnvollen Titel für den Thread wählen

    cu André



  • Damit dein Code lesbar bleibt, würde ich folgenden Code nehmen. Ich weiß zwar net obs die beste, oder ganz gar eine gute Lösung ist, doch so würde ich sie verwenden, aber ich bleib bei dem alten ae, oe...

    #include <iostream>
    
    std::string umlaut(char umlaut)
    {
        switch(umlaut)
        {
            case 'ä':
                return "\x84";
            case 'Ä':
                return "\x8e";
            case 'ö':
                return "\x94";
            case 'Ö':
                return "\x99";
            case 'ü':
                return "\x81";
            case 'Ü':
                return "\x9a";
            case 'ß':
                return "\xe1";
        }
    }
    
    int main()
    {
        std::cout << "Hei" << umlaut('ß') << std::endl;
        std::cout << "Fl" << umlaut('ü') << "sse";
    
        return 0;
    }
    


  • zwutz schrieb:

    Grob so:

    int main()
    {
       SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0); // statt der 0 einfach eine Zahl zw. 0 und 15 für die Farbe angeben
    
       std::cout << "Dein Name" << std::endl;
    }
    

    Danke. Hat funktioniert.

    Wie brech ich jetzt eigentlich den Text um? Das Fenster ist 80 Zeichen breit und wenn der Text länger ist, bricht er ihn einfach ganz am Ende um und zerschnippelt so die Wörter. Wie kann ich manuell einen Zeilenumbruch reinmachen?



  • FreakY<3Cpp schrieb:

    Damit dein Code lesbar bleibt, würde ich folgenden Code nehmen. Ich weiß zwar net obs die beste, oder ganz gar eine gute Lösung ist, doch so würde ich sie verwenden, aber ich bleib bei dem alten ae, oe...

    #include <iostream>
    
    std::string umlaut(char umlaut)
    {
        switch(umlaut)
        {
            case 'ä':
                return "\x84";
            case 'Ä':
                return "\x8e";
            case 'ö':
                return "\x94";
            case 'Ö':
                return "\x99";
            case 'ü':
                return "\x81";
            case 'Ü':
                return "\x9a";
            case 'ß':
                return "\xe1";
        }
    }
    
    int main()
    {
        std::cout << "Hei" << umlaut('ß') << std::endl;
        std::cout << "Fl" << umlaut('ü') << "sse";
    
        return 0;
    }
    

    Unter Windows kannst Du einfach die API-Funktion CharToOem verwenden.



  • Jenny86 schrieb:

    Wie brech ich jetzt eigentlich den Text um? Das Fenster ist 80 Zeichen breit und wenn der Text länger ist, bricht er ihn einfach ganz am Ende um und zerschnippelt so die Wörter. Wie kann ich manuell einen Zeilenumbruch reinmachen?

    Die Frage gabs auch kürzlich. Du müsstest manuell die Zeichenlänge beachten und schauen, dass immer ganze Wörter umgebrochen werden.

    Such doch mal nach dem Thread...



  • Nexus schrieb:

    Jenny86 schrieb:

    Wie brech ich jetzt eigentlich den Text um? Das Fenster ist 80 Zeichen breit und wenn der Text länger ist, bricht er ihn einfach ganz am Ende um und zerschnippelt so die Wörter. Wie kann ich manuell einen Zeilenumbruch reinmachen?

    Die Frage gabs auch kürzlich. Du müsstest manuell die Zeichenlänge beachten und schauen, dass immer ganze Wörter umgebrochen werden.

    Such doch mal nach dem Thread...

    Das mit der Zeilenlänge krieg ich schon hin. Ich muss nur ganz generell wissen, wie man einen Umbruch macht.



  • Mit der Escapesequenz '\n' oder mit std::endl (für einen Stream).

    Das Zeichenkettenliteral "Hallo\nWelt! Ein Test\nLetzte Zeile" würde so dargestellt:

    Hallo
    Welt! Ein Test
    Letzte Zeile
    


  • Nexus schrieb:

    Mit der Escapesequenz '\n' oder mit std::endl (für einen Stream).

    Das Zeichenkettenliteral "Hallo\nWelt! Ein Test\nLetzte Zeile" würde so dargestellt:

    Hallo
    Welt! Ein Test
    Letzte Zeile
    

    Danke sehr. Funktioniert. 🙂 👍

    Was mach ich eigentlich, wenn ich zwei Zahlen dividieren will?

    cout << 10 : 2;
    

    funktioniert nicht.


  • Administrator

    Jenny86 schrieb:

    Was mach ich eigentlich, wenn ich zwei Zahlen dividieren will?

    cout << 10 : 2;
    

    funktioniert nicht.

    Vielleicht solltest du mal ein C++ Tutorial oder C++ Buch kaufen. Das sind absolute Grundlagen!

    Tutorial: http://tutorial.schornboeck.net/
    Bücher: C++ Primer oder Thinking in C++ 1&2

    Ich bin jetzt aber noch so nett und gebe dir einen Tipp:

    10 / 2
    

    Grüssli



  • Du solltest vielleicht mal ein Buch zu C++ anschauen, da werden solche Grundlagen geklärt.

    Der Divisionsoperator ist /. Abgesehen davon: Gewöhn dir bitte gleich an, zu sagen, was nicht geht - das ist dann in späteren Beiträgen hilfreich und bewahrt dich vor einer Diskussion, die am eigentlichen Thema vorbeigeht.


Anmelden zum Antworten