Dies ist eine sehr grundlegende C-Frage, die von Seite 18 von Kernighan und Ritchie kommt.Warum liest getchar() Zeichen wie Backspace nicht?
ich diesen sehr einfachen Code kompiliert haben für Zeichen von der Tastatur eingegeben zählen:
#include <stdio.h>
/* count characters in input; 1st version */
main()
{
long nc;
nc = 0;
while (getchar() != EOF)
++nc;
printf("%1d\n", nc);
}
Dies kompiliert gut, läuft gut, und verhält sich so ziemlich wie erwartet das heißt, wenn ich eintrete „Hallo Welt“, es gibt einen Wert von 11 zurück, wenn ich CTRLD drücke, um das EOF-Zeichen zu geben.
Was mich verwirrt, ist, wenn ich einen Fehler mache, kann ich Backspace verwenden, um die Zeichen zu löschen und sie erneut eingeben, und es gibt nur die Anzahl der Zeichen vom Terminal angezeigt, wenn ich EOF aufrufen.
Wenn der Code jedes Zeichen zählt, einschließlich Sonderzeichen, wenn ich vier Zeichen eingeben, zwei löschen und zwei weitere eingeben, sollte dies nicht als 8 Zeichen ausgegeben werden (4 Zeichen + 2 Zeichen + 2 Zeichen), nicht 4?
Ich verstehe offensichtlich, wie C Backspace behandelt, und wie/wann der Code die Variable nc
inkrementiert?
Die Bearbeitung wird von der Terminal-Anwendung behandelt, so dass die 'getchar' nie die Löschungen liest. –
Hinweis: Sie sollten 'int main (void)' anstelle von 'main()' verwenden, da das erstere nach dem Standard gültig ist. –
@CoolGuy: Eigentlich ist die zweite Version noch gültig, aber ein Vermächtnis. Es ist eine Obsoleszenz-Funktion und wird möglicherweise aus dem Standard entfernt. Sagte: Ja, die erste Version sollte definitiv verwendet werden. Im Allgemeinen sollten Prototypen-ähnliche Signaturen für Funktionen im Allgemeinen verwendet werden. – Olaf