0Pricing
C Academy · Lektion

Häufige I/O-Fallstricke

Probleme mit Puffer und Zeilenumbruch

Häufige I/O-Fallstricke ist eine kostenlose C Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C Academy-Kurs umfasst insgesamt 4 Lektionen.

Häufige Fehler bei der Ein- und Ausgabe

Bei der Ein- und Ausgabe in C gibt es einige klassische Fallen. Wenn Sie sie kennen, sparen Sie viel Zeit beim Debuggen.

#include <stdio.h>
int main(void) {
    printf("Let us study I/O pitfalls\n");
    return 0;
}

Das übrig gebliebene Newline-Zeichen

Nach scanf("%d", ...) hinterlässt die Eingabetaste ein \n im Puffer. Ein späteres %c liest dieses Newline-Zeichen statt der eigentlichen Eingabe.

#include <stdio.h>
int main(void) {
    char c = 'A';
    printf("Use a space before %%c to skip the leftover newline\n");
    printf("c = %c\n", c);
    return 0;
}

Mit einem Leerzeichen beheben

Wenn Sie scanf(" %c", &c) mit einem führenden Leerzeichen schreiben, weisen Sie scanf an, zuerst Leerraum zu überspringen.

#include <stdio.h>
int main(void) {
    char c = 'Z';
    printf("scanf(\" %%c\", &c) skips whitespace\n");
    printf("c = %c\n", c);
    return 0;
}

Das Et-Zeichen vergessen

Wenn Sie eine Variable ohne & an scanf übergeben, wird an einer falschen Adresse gespeichert, was wahrscheinlich zu einem Absturz führt.

#include <stdio.h>
int main(void) {
    int n = 9;
    printf("Always pass &n, not n, to scanf for an int\n");
    printf("n = %d\n", n);
    return 0;
}

Nicht übereinstimmende Formatangaben

Wenn Sie in scanf einen double mit %f statt mit %lf einlesen, wird der Wert beschädigt. Bei der Ausgabe wird für beide %f verwendet, bei der Eingabe gibt es jedoch einen Unterschied.

#include <stdio.h>
int main(void) {
    double d = 2.5;
    printf("scanf needs %%lf for double; printf uses %%f\n");
    printf("d = %.1f\n", d);
    return 0;
}

Ausgabepufferung

Ausgaben können gepuffert werden und daher nicht sofort erscheinen. Ein abschließendes \n oder der Aufruf von fflush(stdout) leert den Puffer.

#include <stdio.h>
int main(void) {
    printf("Flushed by newline\n");
    fflush(stdout);
    return 0;
}

gets ist gefährlich

Die alte Funktion gets überprüfte die Grenzen nicht und wurde aus modernen C-Versionen entfernt. Verwenden Sie stattdessen fgets.

#include <stdio.h>
int main(void) {
    char buf[10];
    /* fgets(buf, sizeof buf, stdin); */
    buf[0] = 'H'; buf[1] = 'i'; buf[2] = 0;
    printf("buf = %s\n", buf);
    return 0;
}

Pufferüberlauf mit %s

Ein einfaches %s in scanf kann über das Ende eines kleinen Arrays hinaus schreiben. Begrenzen Sie die Eingabe mit einer Breite wie %19s.

#include <stdio.h>
int main(void) {
    char name[20];
    printf("Use %%19s to leave room for the null terminator\n");
    name[0] = 0;
    printf("name length cap protects buffer\n");
    return 0;
}

fgets behält das Newline-Zeichen

fgets speichert das abschließende Newline-Zeichen. Häufig müssen Sie es entfernen.

#include <stdio.h>
#include <string.h>
int main(void) {
    char line[] = "hello\n";
    line[strcspn(line, "\n")] = 0;
    printf("[%s]\n", line);
    return 0;
}

Rückgabewerte ignorieren

Wenn Sie den Rückgabewert von scanf nicht überprüfen, werden fehlerhafte Eingaben stillschweigend akzeptiert. Überprüfen Sie ihn immer.

#include <stdio.h>
int main(void) {
    int n = 3;
    int items = 1;
    if (items != 1)
        printf("bad input\n");
    else
        printf("ok: %d\n", n);
    return 0;
}

Alles sicher zusammenführen

Ein robustes Muster: Lesen Sie mit fgets, analysieren Sie mit sscanf und überprüfen Sie das Ergebnis.

#include <stdio.h>
int main(void) {
    char line[] = "123";
    int n;
    if (sscanf(line, "%d", &n) == 1)
        printf("parsed %d\n", n);
    return 0;
}

Kurzer Test

Testen Sie Ihr Verständnis der Fallen bei der Ein- und Ausgabe.

Rückblick: Häufige Fallen bei der Ein- und Ausgabe

Sie haben gelernt, häufige Fehler zu vermeiden.

  • Übrig gebliebene Newline-Zeichen verwirren %c; verwenden Sie ein führendes Leerzeichen
  • Übergeben Sie mit & immer Adressen
  • Verwenden Sie %lf, um double-Werte einzulesen
  • Bevorzugen Sie fgets gegenüber gets und begrenzen Sie %s
  • Überprüfen Sie Rückgabewerte und leeren Sie den Ausgabepuffer

Häufig gestellte Fragen

Ist die Lektion „Häufige I/O-Fallstricke“ kostenlos?

Ja — der vollständige Text von „Häufige I/O-Fallstricke“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Häufige I/O-Fallstricke“?

Probleme mit Puffer und Zeilenumbruch Du übst C Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C Academy zu starten?

Keine Vorkenntnisse erforderlich. C Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Häufige I/O-Fallstricke“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C Academy-Lektion Code schreiben und ausführen?

Ja. Jede C Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. printf-Formatbezeichner
  2. scanf und Eingaben
  3. Breite, Präzision, Flags
  4. Häufige I/O-Fallstricke
← Zurück zu C Academy