printf Gibt ein zusätzliches "D" aus, nachdem getchar () [duplicate] @ aufgerufen h

Diese Frage hat hier bereits eine Antwort:

Warum druckt C-Programm 0D anstelle von 0? (Wenn EOF als Strg + D gesendet wurde) [duplizieren] 2 Antworten

Ich versuche, "The C Programming Language" durchzuarbeiten, und stoße auf einige Probleme mit printf und dem EOF-Zeichen. Ich arbeite am Mac-Terminal und kompiliere mit clang.

Diesen Code ausführen:

#include <stdio.h>

main()
{
    int val;
    while ((val = getchar()) != EOF)
        printf("%d\n", val);
    /*val = 5;*/
    /*printf("hi\n");*/
    /*printf("%d\n", val);*/
    printf("%d\n", val);
}

works wie ich es erwarten würde, blocken bis ich ein Zeichen eingebe und drucke:"*character code*\n10\n", ausser fürctrl-d, was "-1" dann beendet.

Nach dem Auskommentieren des"val = 5;" -Anweisung jedoch durch Eingabe von "ctrl-d "veranlasst den Ausdruck:"5D".

Ich habe damit rumgespielt und festgestellt, dass das zweite Drucken von val (die dritte kommentierte Anweisung) nur zu @ führone "D": "5D\n5" und das Drucken einer Konstante vor den Variablen (die zweite kommentierte Anweisung) verhindert, dass das "D" angezeigt wird:"hi\n5\n5".

Ich will das D absolut nicht und wenn jemand erklären könnte, wie man es entfernt, wäre ich sehr dankbar.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage