char ausgabe %c
-
ich habe ja nicht A geschrieben!
ich habe geschrieben das alles zahlen über 127 falsch geprintet werden, wie kann ich das umgehen.
und nicht wo liegt A.
-
A steht für A mit hütchen-strich ... uff ..ein wenig denken plz
lass einfach mal mein programm oben laufen und dann motz weiter !
[ Dieser Beitrag wurde am 05.04.2003 um 11:44 Uhr von elise editiert. ]
-
@elise: sorry, das geht aber auch eleganter (und c ist dein code nicht)
int printf(const char *, ...); int main() { int i; for (i = 127; i < 195; ++i) printf("%d = %c", i, (char) i); }
wobei das (char) zumindest aufm x86 meines wissens unnötig is
ps: ich bin ein alter motzer
edit: kommt glaub noch n const rein
[ Dieser Beitrag wurde am 05.04.2003 um 11:48 Uhr von Mr. N editiert. ]
-
mir egal ob elegant oder nicht
der oben soll einfach mal schaun, wo sein a mit hütchen überhaupt versteckt ist !
@Mr.N
manchmal muss man schaun, worums eigentlich geht :p
-
und da gibts noch ein problem:
meines wissens gibt es compiler, die das char automatisch unsigned machen, und welche, die von -127 bid -127 nehmen.
du brauchst zur sicherheit dann noch ein unsigned
-
genau das habe ich doch gesagt das das mit %c nicht geht.weil wenn du mal vergleichen willst http://www.torsten-horn.de/techdocs/ascii.htm
die ausgabe stimmt halt überhaupt nicht !!!!
p.s. ich will jetzt nicht motzen, des ist nur meine komische art zuschreiben;-)
bin für deine hilfe echt sehr dankbar, mich nervt es nur immer wenn ich was poste und irgendwer gibt mirimmer ne antwort die garnichts mit meiner frage zu tun hatalso danke nochmal.
und lösungsidee ?
output -----------
127 = ? -- 128 = Ç -- 129 = ü -- 130 = é -- 131 = â -- 132 = ä -- 133 = à -- 134
= å -- 135 = ç -- 136 = ê -- 137 = ë -- 138 = è -- 139 = ï -- 140 = î -- 141 =
ì -- 142 = Ä -- 143 = Å -- 144 = É -- 145 = æ -- 146 = Æ -- 147 = ô -- 148 = ö -
- 149 = ò -- 150 = û -- 151 = ù -- 152 = ÿ -- 153 = Ö -- 154 = Ü -- 155 = ø -- 1
56 = £ -- 157 = Ø -- 158 = × -- 159 = ƒ -- 160 = á -- 161 = í -- 162 = ó -- 163
= ú -- 164 = ñ -- 165 = Ñ -- 166 = ª -- 167 = º -- 168 = ¿ -- 169 = -- 170 = ¬
-- 171 = ½ -- 172 = ¼ -- 173 = ¡ -- 174 = « -- 175 = » -- 176 = ? -- 177 = ? --
178 = ? -- 179 = ? -- 180 = ? -- 181 = Á -- 182 = Â -- 183 = À -- 184 = -- 18
5 = ? -- 186 = ? -- 187 = ? -- 188 = ? -- 189 = ¢ -- 190 = ¥ -- 191 = ? -- 192 =
? -- 193 = ? -- 194 = ? --
-
@elise: dieses problem gibt es _meines wissens_ von char nach int aber nicht umgekehrt.
und ich weiß worums geht. ich kann aber keinen code vertragen, der soviele leerzeilen enthält (JA, das ist der grund warum ich mich gemeldet habe)
@mart: >127 ... da is die frage, ob dich ascii wirklich interessiert.[ Dieser Beitrag wurde am 05.04.2003 um 12:43 Uhr von Mr. N editiert. ]
-
@MrN
die letzte klammer mag etwas zu tief geraten sein..
der rest ist aber sache deines teams.. wenn die sich für eine art zu proggen entscheiden, dann übernehm ich die entscheidung.
im momment habe ich einen bestimmten java stil drauf, auch in c++ seh ich den neuerdings oft, ich gebe zu, hat nix mit den (ich kenn nur solche) meist allein vor sich hindümpelnden c proggern zu tun *g*, die können ja dann für sich entscheiden, wies sies tun.dein a mit strich liegt dann wohl auf 183, ich kenn mich mit über 127 nicht aus, nur daß es nicht mehr einheitlich sein muss...
-
noch ein kleiner auszug dazu:
Multibyte-Zeichen sind insbesondere die Zeichen des Uni(-versal)Codes, der in Java und bei Internet-Browsern große Bedeutung gewonnen hat. Unter UNIX wird in der Regel der bekannte ASCII- Zeichensatz ( American Standard Code for Information Interchange ) verwendet. Da in einem 8-Bit-Code 28=256 Zeichen möglich sind, belegt der ASCII-Code mit den Zeichen Nr. 0 bis Nr. 127 genau die erste Hälfte. Die Verwendung der Zeichen Nr. 128 bis Nr. 255 ist bei Verwendung des ASCII-Codes maschinenabhängig. Die Darstellung hängt vom Betriebssystem und von dem jeweils geladenen Tastaturtreiber ab. Ein typisches Beispiel für ein Durcheinander von Zeichensätzen erhält man, wenn man einen Windows-Text mit Umlauten in einem DOS-Fenster liest.
aus: http://www.addison-wesley.de/katalog/bsp/382731531Xbsp.htm
-
ich kann aber keinen code vertragen, der soviele leerzeilen enthält
Und ich kriege eine Anomalie, wenn ich einen printf-prototype sehe.
-
Mr. N & elise: Auch wenn das mittlerweile nicht mehr der Diskussionspunkt ist: Bei Funktionen mit variabler Arumentleiste werden die Defaultpromotionen durchgeführt, ein char wird also hier als int übergeben, ein float als double, ein short als int usw usf. Und laut meiner Dokumentation gibt '%c' einen unsigned char aus, also ist der Cast auf char überflüssig (wenn ein char einen kleineren Wertebereich als int hat).
-
ich sehe grad, es ist compilerabhängig...
kann mir einer erklären, warum auf gleichem rechner, das studio den obigen code mit dem auswurf von mart macht, A mit strich auf 182, der cygwin aber tatsächlich auf der 193 das A mit strich fährt?
ich dachte, es ist rechnerabhängig...
[ Dieser Beitrag wurde am 05.04.2003 um 13:29 Uhr von elise editiert. ]
-
Es ist sogar abhängig von der verwendeten Schriftart.
Manche Schriften machen dann ein Herzchen oder sowas
-
@elise
das liegt wahrscheinlich daran, dass Cygwin ja ein POSIX/Unix Emulator ist und deswegen auch einen anderen Zeichensatz nutzt/emuliert
-
ich nehme an, der Visual nimmt den DOS-Konsolen-Zeichensatz und der Cygwin ISO-8859-1.
-
Bisher dachte ich immer das der ASCII Code einheitlich wäre ... wieso tauchen auf einmal solche unterschiede auf?
-
@mart
die lösung deiner probleme: nimm den cygwin
-
@elise: Nene, C coden dürfen die, die Kernel baun. (Und fürn Team bin ich zu jung *g*)
@Bitsy: Ein Prototyp ist schneller als ein #include - für den Compiler.
@Daniel E.: Darauf hatte ich schon hingewiesen :p
-
@elise: weil ich cygwin verwendet habe, bin ich ja komplett umgestiegen - und hab sogar ut2003 (die demo) - mein lieblingsspiel
-
Original erstellt von Angel84:
Bisher dachte ich immer das der ASCII Code einheitlich wäre ... wieso tauchen auf einmal solche unterschiede auf?ASCII (ASCII heißt schon 'American Standard Code for Information Interchange'; nochmal ein Code dahinterzuschereiben kommt mir irgendwie komisch vor...), umfasst nur den Bereich von 0 bis 127. Der Rest ist eben irgendwas anderes.
Original erstellt von Mr. N:
@Daniel E.: Darauf hatte ich schon hingewiesen :pJa, mit einer Einschränkung (»zumindest aufm x86 meines wissens«), die überflüssig war und einen mitlesenden Neuling verwirren könnte.