www.mikrocontroller.net

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


Autor: A. R. (redegle)
Datum:

Bewertung
0 lesenswert
nicht 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
/* newline.c */
#include <stdio.h>

int main(void) {
   printf("Darstellung von Newline \\n \n");
   printf("Mögliche Ausführung von Newline\n");
   printf("Mit hexadezimaler Angabe : \\xa \xa");
   printf("Mit oktaler Wertangabe   : \\012 \012");
   printf("Mit dezimaler Angabe     : 10%c",10);
   printf("Hallo\0Ich bin nicht mehr lesbar\n");
   return 0;
}

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

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guck dir einfach mal die String-Formatierungsmakros in einem C-Buch an.

Autor: Ingo W. (Gast)
Datum:

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

Autor: A. R. (redegle)
Datum:

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

10%c" = 10 ?

Autor: melt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, das 10 gehört noch zum Text.

Autor: g457 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 10%c" = 10 ?

Nö. Erstmal kuckst du Doku, da steht ungefähr
The conversion specifiers and their meanings are: [..]
- 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

Autor: A. R. (redegle)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas Ferber (aferber)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A. R. (redegle)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: helper (Gast)
Datum:

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

Achtung: nicht /n sondern \n !!!

helper

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.