Eingabe- und Ausgabefunktionen in C

Hallo da draußen, zukünftige Programmierer! Heute machen wir uns auf eine aufregende Reise in die Welt der Eingabe und Ausgabe (I/O) in der C-Programmierung. Als dein freundlicher Nachbarschafts-Computerlehrer bin ich hier, um dich durch diesen wichtigen Aspekt des Programmierens zu führen. Also, hol dir deine virtuellen Notizblöcke und tauchen wir ein!

C - Input & Output

Die Standarddateien in C

Bevor wir an unseren Tastaturen loslegen, lassen wir uns über etwas Grundlegendes unterhalten: die Standarddateien in C. Sie sehen, wenn du ein C-Programm ausführst, öffnet es automatisch drei Dateien für dich. Es ist, als hättest du drei hilfreiche Assistenten, die die Kommunikation deines Programms mit der Außenwelt verwalten.

  1. stdin (Standard-Eingabe)
  2. stdout (Standard-Ausgabe)
  3. stderr (Standard-Fehler)

Diese Dateien sind das Tor deines Programms zur Außenwelt und zum Benutzer. Denk daran, stdin als die Ohren deines Programms zu sehen, stdout als seinen Mund und stderr als seine Art zu schreien, wenn etwas falsch läuft. Cool, oder?

Arten von Eingabe- und Ausgabefunktionen

Nun lassen sich über die Werkzeuge sprechen, die wir verwenden, um mit diesen Dateien zu interagieren. In C haben wir zwei Hauptarten von I/O-Funktionen:

  1. Unformatierte I/O-Funktionen
  2. Formatierte I/O-Funktionen

Unformatierte Funktionen arbeiten mit rohen Daten, während formatierte Funktionen es uns ermöglichen, das Format unserer Daten anzugeben. Es ist wie der Unterschied zwischen dem Essen von rohem Reis (unformatiert) und einer wunderschön angerichteten Gourmetmahlzeit (formatiert). Beide erledigen die Arbeit, aber eine gibt dir mehr Kontrolle über die Präsentation!

Unformatierte Zeichen-Eingabe- und -Ausgabefunktionen: getchar() und putchar()

Lassen wir es einfach angehen mit den unformatierten Zeichen-I/O-Funktionen. Lerne unsere ersten beiden Funktionen kennen: getchar() und putchar().

getchar()

getchar() liest ein einzelnes Zeichen von der Standard-Eingabe (normalerweise deiner Tastatur). Es ist wie ein geduldiger Zuhörer, der darauf wartet, dass du ein einziges Zeichen eingibst.

#include <stdio.h>

int main() {
char ch;
printf("Gib ein Zeichen ein: ");
ch = getchar();
printf("Du hast eingegeben: ");
putchar(ch);
return 0;
}

In diesem Beispiel wartet getchar() darauf, dass du ein Zeichen eingibst und speichert es in ch. Es ist so einfach, yet so mächtig!

putchar()

putchar() ist das Gegenstück zu getchar(). Es gibt ein einzelnes Zeichen an die Standard-Ausgabe aus (normalerweise dein Bildschirm). Es ist wie ein Stadtbräu, der ein einzelnes Zeichen nach dem anderen ankündigt.

#include <stdio.h>

int main() {
char ch = 'A';
printf("Ein Zeichen ausgeben: ");
putchar(ch);
return 0;
}

Hier gibt putchar(ch) das Zeichen 'A' auf deinem Bildschirm aus. Einfach und effektiv!

Formatierte Zeichenketten-Eingabe- und -Ausgabefunktionen: gets(), fgets(), puts(), und fputs()

Nun steigen wir eine Stufe höher und sprechen über Zeichenketten-I/O. Diese Funktionen handhaben ganze Zeichenketten, nicht nur einzelne Zeichen.

gets() und fgets()

gets() liest eine Zeile von stdin in einen Puffer. Es ist jedoch als unsicher angesehen, weil es keine Überprüfung auf Pufferüberläufe durchführt. Deshalb bevorzugen wir seinen sichereren Cousin, fgets().

#include <stdio.h>

int main() {
char name[50];
printf("Gib deinen Namen ein: ");
fgets(name, sizeof(name), stdin);
printf("Hallo, %s", name);
return 0;
}

In diesem Beispiel liest fgets() eine Zeile von Text (deinen Namen) in das Array name. Es ist sicherer, weil wir die maximale Anzahl der zu lesenden Zeichen angeben.

puts() und fputs()

puts() schreibt eine Zeichenkette in die Standard-Ausgabe und fügt einen Zeilenumbruch hinzu. Sein Dateistrom-Gegenstück ist fputs().

#include <stdio.h>

int main() {
char greeting[] = "Hallo, Welt!";
puts(greeting);  // Ausgabe: Hallo, Welt! (mit Zeilenumbruch)
fputs(greeting, stdout);  // Ausgabe: Hallo, Welt! (ohne Zeilenumbruch)
return 0;
}

puts() fügt automatisch einen Zeilenumbruch hinzu, während fputs() dir mehr Kontrolle gibt.

Formatierte Eingabe- und Ausgabefunktionen: scanf() und printf()

Nun kommen wir zu den Schwergewichten der I/O in C: scanf() und printf(). Diese Funktionen sind wie die Schweizer Army Knives der I/O - vielseitig und mächtig.

scanf()

scanf() liest formatierte Eingaben von stdin. Es ist wie ein wählerischer Esser, der nur Essen akzeptiert, das genau nach Vorgabe zubereitet ist.

#include <stdio.h>

int main() {
int alter;
float groesse;
printf("Gib dein Alter und deine Größe ein: ");
scanf("%d %f", &alter, &groesse);
printf("Du bist %d Jahre alt und %.2f Meter groß.\n", alter, groesse);
return 0;
}

Hier liest scanf() eine Ganzzahl (%d) und eine Fließkommazahl (%f) von der Eingabe. Das & vor alter und groesse ist entscheidend - es tells scanf(), wo die Werte gespeichert werden sollen.

printf()

printf() ist das Ausgabependant zu scanf(). Es ist wie ein meisterhafter Geschichtenerzähler, der deine Daten in schön formatierte Strings verwandelt.

#include <stdio.h>

int main() {
int aepfel = 5;
float preis = 0.75;
printf("Ich habe %d Äpfel, jeder kostet $%.2f.\n", aepfel, preis);
return 0;
}

In diesem Beispiel formatiert printf() unsere Daten in einen schönen, lesbaren Satz.

Formatangaben in C

Formatangaben sind das Geheimrezept, das scanf() und printf() so mächtig macht. Sie sind wie Anweisungen, die diese Funktionen darüber informieren, wie Daten interpretiert oder präsentiert werden sollen.

Hier ist eine praktische Tabelle der häufigsten Formatangaben:

Angabe Datentyp
%d Ganzzahl
%f Fließkommazahl
%c Zeichen
%s Zeichenkette
%lf Double
%x Hexadezimal
%o Oktal
%p Zeiger

Denke daran, dass du diese Angabemodifizieren kannst. Zum Beispiel druckt %.2f eine Fließkommazahl mit 2 Nachkommastellen und %5d eine Ganzzahl in einer Feldbreite von 5 Zeichen aus.

Und das war's, Leute! Wir haben die Grundlagen der Eingabe und Ausgabe in C abgedeckt. Denke daran, Übung macht den Meister. Also, mach mit und fange an zu programmieren! Wer weiß? Vielleicht erstellst du das nächste große Ding in der Technologie. Bis zum nächsten Mal, viel Spaß beim Programmieren!

Credits: Image by storyset