Eingabe und Ausgabe in C meistern: scanf, printf & Co.
Unter Eingabe (Input) versteht man das Zuführen von Daten in ein Programm. Eingabe kann als Datei oder über die Kommandozeile erfolgen. C bietet eingebaute Funktionen zum Lesen der Eingabe und Übergeben an das Programm.
Unter Ausgabe (Output) versteht man das Anzeigen von Daten auf Bildschirm, Drucker oder in Dateien. C bietet eingebaute Funktionen zur Ausgabe auf dem Bildschirm und zum Speichern in Text- oder Binärdateien.
Die Standard-Dateien
C behandelt alle Geräte als Dateien. Anzeigegeräte werden wie Dateien adressiert. Drei Dateien werden automatisch geöffnet, wenn ein Programm startet:
| Standard-Datei | Dateizeiger | Gerät |
|---|---|---|
| Standard-Eingabe | stdin | Tastatur |
| Standard-Ausgabe | stdout | Bildschirm |
| Standard-Fehler | stderr | Bildschirm |
Dateizeiger sind das Mittel, um auf Dateien zum Lesen und Schreiben zuzugreifen.
getchar() und putchar()
int getchar(void) liest das nächste verfügbare Zeichen vom Bildschirm (stdin) und gibt es als Integer zurück. Liest nur ein einzelnes Zeichen pro Aufruf. In einer Schleife können Sie mehrere Zeichen lesen.
int putchar(int c) schreibt das übergebene Zeichen auf den Bildschirm (stdout) und gibt dasselbe Zeichen zurück. Auch hier: ein Zeichen pro Aufruf, in Schleife für mehrere.
Beispiel
#include <stdio.h>
int main() {
int c;
printf("Eingabe: ");
c = getchar();
printf("\nSie haben eingegeben: ");
putchar(c);
return 0;
}
Ausgabe (Eingabe: "test"):
Eingabe: test
Sie haben eingegeben: t
Nur das erste Zeichen wird gelesen.
gets() und puts()
char *gets(char *s) liest eine Zeile von stdin in den Puffer s bis Newline oder EOF.
int puts(const char *s) schreibt den String s und ein nachfolgendes Newline nach stdout.
WICHTIG: gets() ist deprecated (veraltet) und unsicher (Pufferüberlauf). Verwenden Sie stattdessen fgets().
Beispiel (nur zur Demonstration)
#include <stdio.h>
int main() {
char str[100];
printf("Eingabe: ");
gets(str); // UNSICHER!
printf("\nSie haben eingegeben: ");
puts(str);
return 0;
}
Sichere Alternative: fgets()
#include <stdio.h>
int main() {
char str[100];
printf("Eingabe: ");
if (fgets(str, sizeof(str), stdin) != NULL) {
// Entferne trailing newline falls vorhanden
str[strcspn(str, "\n")] = '\0';
printf("Sie haben eingegeben: %s\n", str);
}
return 0;
}
scanf() und printf()
int scanf(const char *format, ...) liest Eingabe von stdin und scannt gemäß dem Format.
int printf(const char *format, ...) schreibt Ausgabe nach stdout gemäß dem Format.
Das Format kann ein konstanter String sein, aber Sie können %s, %d, %c, %f, %lf, %p etc. verwenden für Strings, Integer, Zeichen, Float, Double, Pointer. Viele weitere Formatierungsoptionen sind verfügbar.
Einfaches Beispiel
#include <stdio.h>
int main() {
char str[100];
int i;
printf("Eingabe (String und Integer): ");
scanf("%s %d", str, &i);
printf("\nEingegeben: %s %d\n", str, i);
return 0;
}
Ausgabe (Eingabe: "sieben 7"):
Eingabe (String und Integer): sieben 7
Eingegeben: sieben 7
Hinweise zu scanf():
- Erwartet Eingabe exakt im angegebenen Format (
%s %d→ „String Integer“). - Bei String-Einlesen stoppt
%sbeim ersten Whitespace. „this is test“ sind drei Strings für scanf(). - Für Zeilen mit Leerzeichen verwenden Sie
fgets()oderscanf("%99[^\n]", str). - Prüfen Sie immer den Rückgabewert von
scanf()(Anzahl erfolgreich eingelesener Items).
Format-Spezifizierer Übersicht
| Spezifizierer | Typ | Beschreibung |
|---|---|---|
| %d, %i | int | Vorzeichenbehaftete Ganzzahl |
| %u | unsigned int | Vorzeichenlose Ganzzahl |
| %ld | long | Long Integer |
| %lld | long long | Long Long Integer |
| %f | float | Gleitkomma (6 Nachkommastellen default) |
| %lf | double | Double Precision |
| %Lf | long double | Extended Precision |
| %c | char | Einzelnes Zeichen |
| %s | char* | String (bis Whitespace) |
| %p | void* | Zeigeradresse |
| %% | - | Literales % Zeichen |
Formatierungs-Flags (printf)
%-10d // Linksausgerichtet, Breite 10
%05d // Mit führenden Nullen, Breite 5
%+d // Immer Vorzeichen anzeigen
% d // Leerzeichen bei positiven Zahlen
%#x // 0x-Präfix für Hex
%.2f // 2 Nachkommastellen
C Sprache
- C# Keywords und Identifiers verstehen: Regeln, Listen und Best Practices
- C# Grundlagen: Eingabe und Ausgabe Essentials
- C# Klassen & Objekte: Fundamente für robustes OOP
- C++-Eingabe und Ausgabe meistern: Ein praktischer Leitfaden
- C Eingabe und Ausgabe (I/O) meistern: scanf() und printf() erklärt
- Python I/O & Modul-Importe meistern: Praxisleitfaden
- Java Ein- und Ausgabe meistern: Drucken, Lesen und Formatieren Ihrer Daten
- C++ Streams meistern: cout, cin, cerr, clog – Praktischer Guide
- C-Konstanten und Literale: Typen, Verwendung & Best Practices
- C# Konstanten & Literale: Typen, Regeln und Best Practices