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 AntwortenIch 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.