C/C++-Grundlagen

Eingaben einlesen und prüfen in C und C++

In dieser Lektion liest du Benutzereingaben ein und weist ungültige Werte in C und C++ zurück.

Einführung

Das Einlesen von Benutzerdaten kann immer fehlschlagen, etwa wenn das Programm eine Zahl erwartet, der Benutzer aber Buchstaben eingibt. Deshalb muss das Programm das Ergebnis des Lesevorgangs prüfen, statt davon auszugehen, dass die Daten immer stimmen.

Wichtige Punkte

  • Schalte die Compiler-Warnungen (compiler warnings) ein und behebe alle.
  • Verstehe den Datentyp und die Lebensdauer (lifetime) jedes Werts genau.
  • Prüfe immer die Eingabedaten und die Grenzen von Array-Indizes.

Codebeispiele in C und C++

C
Code ausführen →
main.c
#include <stdio.h>

int main(void) {
    int age;
    printf("Age: ");
    if (scanf("%d", &age) != 1 || age < 0) {
        puts("Invalid age");
        return 1;
    }
    printf("Next year: %d\n", age + 1);
    return 0;
}
Ergebnis der Ausführung
Age: 20
Next year: 21
C++
Code ausführen →
main.cpp
#include <iostream>

int main() {
    int age;
    std::cout << "Age: ";
    if (!(std::cin >> age) || age < 0) {
        std::cerr << "Invalid age\n";
        return 1;
    }
    std::cout << "Next year: " << age + 1 << '\n';
}
Ergebnis der Ausführung
Age: 20
Next year: 21

C und C++ im Vergleich

In C gibt scanf die Anzahl der erfolgreich gelesenen Werte zurück, deshalb zeigt die Bedingung scanf(...) != 1, dass das Einlesen des Alters fehlgeschlagen ist. Kann std::cin in C++ die Daten nicht im verlangten Typ lesen, geht es in einen Fehlerzustand über, und der Prüfausdruck wird falsch. Beide Programme weisen außerdem ein negatives Alter zurück.

C

C verwendet kleine prozedurale Funktionen und zeigt offen, wie Daten im Speicher dargestellt werden.

C++

C++ erlaubt weiterhin Arbeit auf niedriger Ebene, ergänzt aber Bibliothekstypen und sicherere Abstraktionen.

Übungen zur Vertiefung

Führe beide Versionen aus und ändere dann den Code, um zu beobachten, welche Sicherheit jede Sprache bietet.

  • Teste ungültige Eingaben und Grenzwerte.
  • Kompiliere mit den Flags -Wall -Wextra -Wpedantic, um zusätzliche Warnungen einzuschalten.
  • Lagere gemeinsame Deklarationen in eine Header-Datei und die Implementierung in eine eigene Datei aus.

Mit einer Challenge üben

Nutze den Inhalt dieser Lektion, um ein echtes Problem zu lösen. Jede Challenge läuft im Browser, mit sofortigen Tests und einem KI-Review.

Alle Challenges