MINT lernen

Datentypen und printf

Warum rechnet C bei 7 / 2 plötzlich falsch — und wie bringst du Zahlen sauber in Spalten?

1

Variablen mit festem Typ

In C musst du jede Variable vor dem ersten Gebrauch mit ihrem Typ deklarieren — der Typ bleibt danach fest.

C · typen.c
#include <stdio.h>

int main(void) {
    int alter = 14;            // ganze Zahl
    double preis = 2.49;       // Kommazahl, doppelte Genauigkeit
    float temperatur = 21.5f;  // Kommazahl, einfache Genauigkeit
    char note = 'B';           // ein Zeichen, einfache Anführungszeichen

    printf("%d Jahre\n", alter);
    printf("%f Euro\n", preis);
    printf("%.1f Grad\n", temperatur);
    printf("Note %c\n", note);
    return 0;
}
Konsole
$ ./typen
14 Jahre
2.490000 Euro
21.5 Grad
Note B
  • int:ganze Zahlen wie 14 oder -3.
  • double:Kommazahlen mit Dezimalpunkt: 2.49.
  • float:Kommazahl mit weniger Genauigkeit, Wert mit f: 21.5f.
  • char:genau ein Zeichen in einfachen Anführungszeichen: 'B'.
  • Deklarieren:Typ name; — vor dem ersten Gebrauch.
  • Initialisieren:Startwert gleich mitgeben: int alter = 14;.
  • Unterschied zu Python:In Python hängt der Typ am Wert und darf wechseln; in C hängt er fest an der Variablen.
C · Ausschnitt aus main
int a = 7, b = 2;
printf("%d\n", a / b);           // Ganzzahldivision
printf("%d\n", a % b);           // Rest
printf("%f\n", 7.0 / 2);         // eine Kommazahl beteiligt
printf("%f\n", (double) a / b);  // Typumwandlung (cast)
Konsole
3
1
3.500000
3.500000
  • int / int:7 / 2 ergibt 3 — der Rest wird abgeschnitten, nicht gerundet.
  • Rest:7 % 2 ergibt 1 (Modulo, nur für ganze Zahlen).
  • Kommazahl beteiligt:7.0 / 2 rechnet mit Kommazahlen: 3.5.
  • Cast:(double) a / b wandelt a vor der Division in double um.
Merke

Division: int / int liefert eine ganze Zahl (Rest weg). Ist ein double beteiligt, entsteht eine Kommazahl.

2

Ausgabe mit printf

printf ersetzt jeden Platzhalter im Formatstring der Reihe nach durch einen Wert aus der Liste dahinter.

  • %d:ganze Zahl (int).
  • %f:Kommazahl, immer mit 6 Nachkommastellen: 2.490000.
  • %.2f:Kommazahl mit 2 Nachkommastellen, gerundet.
  • %c:ein Zeichen (char).
  • %5d:Feldbreite 5: rechtsbündig, links mit Leerzeichen aufgefüllt.
  • %8.2f:Feldbreite 8 und 2 Nachkommastellen — der Punkt zählt mit.
  • \n und \t:Zeilenumbruch und Tabulator (springt zur nächsten Tabstopp-Spalte).
  • %%:gibt ein echtes Prozentzeichen aus.
C · Ausschnitt aus main
int menge = 3;
double preis = 1.8;
printf("Artikel\tMenge\tPreis\n");
printf("Apfel\t%5d\t%8.2f\n", menge, preis);
printf("Rabatt: 10%%\n");
Konsole
Artikel Menge   Preis
Apfel       3       1.80
Rabatt: 10%

Wähle oben eine Variable und stelle mit den Reglern Feldbreite und Nachkommastellen ein. Das Raster zeigt jedes ausgegebene Zeichen in einem eigenen Kästchen — auch die Leerzeichen. Mit den Pfeiltasten wanderst du durch die Kästchen, ▶ lässt die Feldbreite wachsen.

printf-Werkstatt

C · Ausschnitt aus main

Halte fest: Die Feldbreite ist eine Mindestbreite — fehlende Zeichen werden links mit Leerzeichen aufgefüllt, zu lange Zahlen werden nie abgeschnitten. Die Nachkommastellen werden gerundet, und der Dezimalpunkt zählt als eigenes Zeichen mit.

Merke

Platzhalter: % Feldbreite .Nachkommastellen Typzeichen — z. B. %8.2f. Typzeichen passend zum Typ: %d für int, %f für double/float, %c für char.

3

Allgemeine Hinweise

Typzeichen muss passen

printf("%d", 2.5) gibt Unsinn wie -788356920 aus. gcc -Wall warnt: format '%d' expects argument of type 'int'.

Punkt statt Komma

double x = 3,14; ist ein Fehler: expected identifier or '(' before numeric constant. Kommazahlen schreibst du mit Punkt.

Immer initialisieren

Eine Variable ohne Startwert enthält zufälligen Speicherinhalt. Gib ihr beim Deklarieren gleich einen Wert, z. B. int summe = 0;.

Videos