Forum: Compiler & IDEs Was bedeutet "%c" ?


von A. R. (redegle)


Lesenswert?

Hallo, ich versuche mich gerade mich in C einzuarbeiten.

Habe gerade gelesen, dass es mehrere Methoden gibt einen Zeilensprung zu 
erzeugen.

Also mittelen \xa , \012 , 10 und \n
1
/* newline.c */
2
#include <stdio.h>
3
4
int main(void) {
5
   printf("Darstellung von Newline \\n \n");
6
   printf("Mögliche Ausführung von Newline\n");
7
   printf("Mit hexadezimaler Angabe : \\xa \xa");
8
   printf("Mit oktaler Wertangabe   : \\012 \012");
9
   printf("Mit dezimaler Angabe     : 10%c",10);
10
   printf("Hallo\0Ich bin nicht mehr lesbar\n");
11
   return 0;
12
}

Leider verstehe ich nicht wofür das 10%c gut sein soll.

von STK500-Besitzer (Gast)


Lesenswert?

Guck dir einfach mal die String-Formatierungsmakros in einem C-Buch an.

von Ingo W. (Gast)


Lesenswert?

Es ist ein einzelnes (ASCII) Zeichen, in deinem Fall (10) ein 
Zeilenvorschub.
mfG ingo

von A. R. (redegle)


Lesenswert?

>Es ist ein einzelnes (ASCII) Zeichen, in deinem Fall (10) ein
>Zeilenvorschub.

10%c" = 10 ?

von melt (Gast)


Lesenswert?

Nein, das 10 gehört noch zum Text.

von g457 (Gast)


Lesenswert?

> 10%c" = 10 ?

Nö. Erstmal kuckst du Doku, da steht ungefähr
1
The conversion specifiers and their meanings are: [..]
2
- c The int argument is converted to an "unsigned char", and the resulting character is written.
 (aus der avr-libc-Doku für printf. kann man in den man-Pages auch 
ausführlicher haben.. oder in der Standardreferenz, aber wer schaut 
schon in die rein wenn man die man-Pages und die avr-libc-Doku 
installiert hat ∗hust∗).

Es wird also der Parameter "10" vom printf als ASCII-Zeichen 
interpretiert und eingesetzt. Dann kuckst Du in die ASCII-Tabelle und da 
steht an Stelle 10.. 'line feed' (Zeilenumbruch). Aus dem '%c' wird also 
ein Zeilenumbruch, genau das selbe was in C sonst auch mit '\n' 
beschrieben wird.

Aus obigem "10%c" wird mit Parameter 10 also ein "10\n" oder ein "10
" (<- hier mit interpretiertem Zeilenumbruch).

HTH und HF

von A. R. (redegle)


Lesenswert?

Ich musste eigendlich nur wissen, dass %c die entsprechende Ziffer aus 
den ASCII code raussucht.

Also 60 --> <
61 --> =
etc.

Danke für die Hilfe.

von Andreas F. (aferber)


Lesenswert?

A. R. schrieb:
> Ich musste eigendlich nur wissen, dass %c die entsprechende Ziffer aus
> den ASCII code raussucht.

Nein, nicht aus ASCII, sondern aus dem "Execution Character Set". In 
vielen Fällen ist das zwar ASCII, wenn der Code aber irgendwann mal z.B. 
unter z/OS oder OS/390 (IBM-Grossrechner-Betriebssysteme, die EBCDIC als 
Zeichensatz verwenden) laufen sollte, kann das zu bösen Überraschungen 
führen.

Wenn irgendwie möglich, dann sollte man auszugebende Zeichen auch im 
Code als Zeichenkonstanten (oder eben als Zeichen in einem String) 
schreiben, und für Steuerzeichen wie Newlines die von C dafür 
vorgesehenen Escapesequenzen verwenden. Das sorgt für bessere 
Portabilität, und nebenbei erhöht es auch noch die Lesbarkeit.

Andreas

von A. R. (redegle)


Lesenswert?

@Andreas Ferber

Du hast natürlich recht, dass /n um einiges leserlicher ist als 
printf("%c",10);

Ich werde auch nicht auf die Idee kommen printf("%c",10); zu schreiben.
Ging mir halt um die Bedeutung.

von helper (Gast)


Lesenswert?

A. R. schrieb:
> Du hast natürlich recht, dass /n

Achtung: nicht /n sondern \n !!!

helper

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.