Was bedeutet "%c" ?

OP #1805175
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.
Gast #1805238
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
#1805353
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren