Fehler bei Darstellung von Deutschen Umlauten
-
Hallo Freunde, entschuldigt nochmal die Störung,
Aber ich ärgere mich grad mit folgendem Problem rum:
Die Zeile
cout << "[1] Zur\x81ck \n"; soll ein ö darstellenBeim Kompilieren folgende Fehlermeldung:
D:\Programmierung\C++\Programme\RPG>g++ -std=c++14 -o RPG.exe RPG.cpp RPG.cpp: In member function 'void Mensch::anzeigen()': RPG.cpp:85:11: warning: hex escape sequence out of range cout << "[1] Zur\x94ck \n";Ich bitte um Hilfe!
-
Der Wert 0x81c ist zu groß.
Du kannst oktal nehmen oder den String aufteilen.
"[1] Zur\201ck \n" oder "[1] Zur\x81""ck \n"
Oder ganz auf Umlaut5e verzichten.
Das ist problemloser und funktioniert auch mit anderen Codepages.
-
Das anschließende 'c' wird als Teil der Hexadezimalsequenz gewertet. Abhilfen sind vielerlei. Du könntest Oktaldarstellung benutzen ('\' mit einfach nur Ziffern dahinter). Oder die \u-Sequenz mit fester Breite (4). Oder die \U-Sequenz mit fester Breite (8). Oder du könntest das Literal zerlegen in
"zur\x94""ck"Allgemein: Kannst du nicht einfach 'ü' im Quellcode schreiben? Welche archaischen Systeme können denn kein Unicode? Oh, Windowskonsole...
-
Bei der Oktalnotierung ist nach drei Zeichen Schluss.
Die Hexadezimalnotierung dagegen ist gierig. Die nimmt soviel Hexziffern, wie sie bekommen kann.
-
Verstehe. Ich habe allerdings gelernt, daß die Kenntlichmachung von Oktalzahlen in C++ eine führende 0 erfordert. Bilden Steuerzeichen da eine Ausnahme?
Ja, ich nutze Windows (10). Habe aber vor, sofern meine Geräte es zulassen, auf Linux umzusteigen, da Windows heutzutage nichts weiter als Spyware ist. Ich werde mich die Tage rannmachen, Linux Puppy auszuprobieren, scheint am unproblematischsten zu sein.
-
Du hast da eine Escapesequence.
Ein Hexadezimalzahl wird in C auch mit 0x eingeleitet. (Hast du in dem String auch nicht)
-
Stimmt. Wie kann C++ also bei den Steuerzeichen zwischen Hexadezimalzahlen und Oktalzahlen unterscheiden?
Beispielsweise könnte die Zahl 101011 dezimal, duodezimal, hexadezimal, binär usw. interpretiert werden
-
Schau dir (bei Wikipedia) mal Escapesequencen an.
Mit \ fängt da eine Oktalzahl an. Mit \x eine Hexzahl.
Dual- und Dezimalzahlen sind da nicht vorgesehen.Ich kenne keine Sprache, die duodezimal-Zahlen als Literale annimmt.
-
Alles klar, damit ist alles geklärt!
-
Ich kenne keine Sprache, die duodezimal-Zahlen als Literale annimmt.
Ich schon: Gibt's in manchen Smalltalk-Dialekten, heißt Radix-Notation
12r34BA
-
Dexter1997 schrieb:
Hallo Freunde, entschuldigt nochmal die Störung,
Aber ich ärgere mich grad mit folgendem Problem rum:
Die Zeile
cout << "[1] Zur\x81ck \n"; soll ein ö darstellenBeim Kompilieren folgende Fehlermeldung:
Schick Deine Strings vor der Ausgabe durch diese Funktion:
https://msdn.microsoft.com/de-de/library/windows/desktop/dd319646(v=vs.85).aspx