
Das ist die letzte Unit von Kapitel 1 – und ich habe sie für das Beste aufgespart! Mit scanf können Benutzer endlich selbst Werte eingeben. Deine Programme werden damit wirklich interaktiv. Das ist der Moment, wo es sich anfühlt, dass du wirklich programmierst! 🎮
🔄 Das Ein-/Ausgabe-Prinzip
Jedes interaktive Programm hat zwei Richtungen: Der Computer gibt etwas aus (Bildschirm) und nimmt etwas ein (Tastatur). In C übernehmen das zwei Funktionen aus <stdio.h>:
📢 printf – Ausgabe vertieft
Du kennst printf schon aus Unit 2. Jetzt schauen wir uns alle Möglichkeiten genauer an:
| Format | Typ | Beispiel | Ausgabe |
|---|---|---|---|
| %d | int | printf("%d", 42); | 42 |
| %f | float | printf("%f", 3.14f); | 3.140000 |
| %.2f | float (2 Stellen) | printf("%.2f", 3.14159f); | 3.14 |
| %5d | int (5 Stellen breit) | printf("%5d", 42); | 42 |
| %c | char | printf("%c", 'A'); | A |
| %s | String (Text) | printf("%s", "Hallo"); | Hallo |
| %lf | double | printf("%.4lf", 3.14); | 3.1400 |
#include <stdio.h> int main() { int punkte = 87; float schnitt = 2.375f; /* Einfache Ausgabe */ printf("Punkte: %d\n", punkte); /* Zwei Nachkommastellen */ printf("Schnitt: %.2f\n", schnitt); /* Mehrere Werte in einer Zeile */ printf("Punkte: %d | Schnitt: %.1f\n", punkte, schnitt); return 0; }
⌨️ scanf – Benutzereingabe lesen
scanf liest eine Eingabe vom Benutzer (Tastatur) und speichert sie in einer Variable. Die Syntax ist ähnlich wie bei printf – aber mit einem wichtigen Unterschied: dem &-Zeichen.
Bei scanf muss vor dem Variablennamen ein & (kaufmännisches Und / Ampersand) stehen. Das & bedeutet: „Gib mir die Speicheradresse dieser Variable."
Warum? Weil scanf den eingegebenen Wert direkt in den Speicher der Variable schreiben muss – und dafür braucht es die Adresse, nicht nur den Wert.
scanf("%d", alter); ❌ ← häufiger Fehler → undefiniertes Verhalten
Ausnahme: Bei Strings (char-Arrays) braucht man kein & – aber das lernen wir in Kapitel 5.
Syntax von scanf
/* Allgemeine Form: */ scanf("Format-Zeichen", &variable); /* Beispiele: */ int alter; float groesse; char note; scanf("%d", &alter); // liest eine ganze Zahl scanf("%f", &groesse); // liest eine Kommazahl scanf("%c", ¬e); // liest ein einzelnes Zeichen
🎮 Erstes interaktives Programm
Hier siehst du printf und scanf zusammen im Einsatz – das Programm fragt den Benutzer nach seinem Namen (Anfangsbuchstaben) und Alter:
#include <stdio.h> int main() { char anfang; int alter; printf("Anfangsbuchstabe deines Namens: "); scanf(" %c", &anfang); // Leerzeichen vor %c wichtig! printf("Dein Alter: "); scanf("%d", &alter); printf("\nHallo, %c! Du bist %d Jahre alt.\n", anfang, alter); return 0; }
🧮 Erweitertes Beispiel: Rechner
Dieses Programm liest zwei Zahlen vom Benutzer und gibt Summe und Produkt aus:
#include <stdio.h> int main() { int a, b; // zwei Variablen auf einmal deklarieren printf("Erste Zahl: "); scanf("%d", &a); printf("Zweite Zahl: "); scanf("%d", &b); printf("\n--- Ergebnis ---\n"); printf("%d + %d = %d\n", a, b, a + b); printf("%d * %d = %d\n", a, b, a * b); return 0; }
⚠️ Typische scanf-Fehler
| Fehler | Problem | Richtig |
|---|---|---|
scanf("%d", alter); | & vergessen → Absturz | scanf("%d", &alter); |
scanf("%d", &pi); bei float | Falsches Format | scanf("%f", &pi); |
scanf("%c", &c); nach scanf | Newline im Puffer | scanf(" %c", &c); (Leerzeichen!) |
| printf vergessen vor scanf | Benutzer weiß nicht was eingeben | Immer zuerst printf mit Aufforderung |
⚠️ Leerzeichen vor %c in scanf
Wenn du nach einem scanf("%d", ...) noch ein scanf("%c", ...) schreibst, kann der Zeilenumbruch (Enter-Taste) des vorherigen Einlesens im Puffer stecken. Das Leerzeichen " %c" springt alle Leerzeichen und Zeilenumbrüche über:
scanf(" %c", ¬e); ← Leerzeichen springt über \n ✅
✏️ Übungen
scanf-Aufrufe ergänzen
Fülle die Lücken aus – verwende den richtigen Format-Spezifizierer und vergiss das & nicht:
int punkte; float temp; char klasse; scanf("___", ___punkte); // Ganze Zahl lesen scanf("___", ___temp); // Kommazahl lesen scanf(" ___", ___klasse); // Zeichen lesen
Programmablauf beschreiben
Beschreibe in Worten, was dieses Programm tut – Schritt für Schritt:
#include <stdio.h>
int main() {
int x, y, summe;
printf("Zahl 1: "); scanf("%d", &x);
printf("Zahl 2: "); scanf("%d", &y);
summe = x + y;
printf("Summe: %d\n", summe);
return 0;
}
Schritt 1:
Schritt 2:
Schritt 3:
Schritt 4:
Fehler finden
In diesem Programm sind 3 Fehler. Finde und korrigiere sie:
#include <stdio.h>
int main() {
int alter;
float groesse;
printf("Dein Alter: ");
scanf("%f", alter);
printf("Deine Groesse: ");
scanf("%d", &groesse);
printf("Alter=%d, Groesse=%.2f\n", groesse, alter);
return 0;
}
Fehler 1:
Fehler 2:
Fehler 3:
Interaktives Schülerprofil
Schreibe ein vollständiges C-Programm, das den Benutzer nach folgenden Daten fragt und diese danach schön formatiert ausgibt:
- Anfangsbuchstabe des Vornamens (char)
- Alter in Jahren (int)
- Notendurchschnitt (float, mit 1 Nachkommastelle ausgeben)
- Klassenbezeichnung als Buchstabe (char)
💡 Live-Compiler Tipp: Klicke auf ▶ Eingabe (stdin) unter dem Code und gib deine Testwerte ein – eine Zeile pro Wert. Dann ▶ Ausführen!
Mini-Taschenrechner
Schreibe einen Taschenrechner, der zwei Zahlen vom Benutzer einliest und Summe, Differenz, Produkt und Quotient ausgibt. Teste mit verschiedenen Eingaben über das Eingabe (stdin)-Feld!
10 Enter 3 – und beobachte alle vier Ergebnisse. Was passiert bei 10 und 0?Unit 6: Rechenoperatoren und Ausdrücke