Problem mit Programm
-
Oke, das mit dem getch funktioniert. Danke.
Jetzt hab ich aber schon wieder ein Problem. Und zwar wollte ich jetzt einen Text ausgeben, der ein Ö drin hat. Aber da kommt bei mir anstelle des Ö nur so ein komisches Zeichen. Warum ist das so?
-
Jenny86 schrieb:
Warum ist das so?
Weil der Zeichensatz, der in der Konsole verwendet wird, nicht mit dem der IDE übereinstimmen muss. Du kannst entweder ausprobieren, welches ASCII-Zeichen für 'Ö' steht, oder du benutzt halt "OE" stattdessen.
Und wähle bitte nächstes Mal einen Threadtitel, mit dem man etwas anfangen kann.
-
Nexus schrieb:
Du kannst entweder ausprobieren, welches ASCII-Zeichen für 'Ö' steht, oder du benutzt halt "OE" stattdessen.
Ist das wirklich die einzige Möglichkeit? OE will ich nicht benutzen, denn das Ö gibt es ja nun mal.
Und das Zeichen, das für Ö steht? Meinst du damit, ich soll in der Entwicklungsumgebung jetzt austesten, welches komische Sonderzeichen mir im Programm ein Ö liefert, so dass mein Quellcode irgendwie so aussieht:std::cout << "Ein schÀner Tag heute.";Da muss es doch eine bessere Möglichkeit geben.

-
Wenn du die Texte im Quellcode lesbar halten willst solltest du auf ö ü und ä verzichten und die alternative Variante benutzen, es bringt dir ja nicht viel wenn es dann ind er Konsole super aussieht und im Quelltext siehts aus als wäre da was umgekippt.
-
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ählencu 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 mitstd::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 mitstd::endl(für einen Stream).Das Zeichenkettenliteral
"Hallo\nWelt! Ein Test\nLetzte Zeile"würde so dargestellt:Hallo Welt! Ein Test Letzte ZeileDanke sehr. Funktioniert.

Was mach ich eigentlich, wenn ich zwei Zahlen dividieren will?
cout << 10 : 2;funktioniert nicht.