Warum heißt scanf scanf? (Gleiches gilt für printf.)

11

Ich bin nur neugierig, warum in der Programmiersprache C die Funktion zum Lesen formatierter Eingaben "scanf" im Gegensatz zu "readf" genannt wurde. Ich gehe davon aus, dass es von einer früheren Sprache abgeleitet ist. Warum wurde es in diesem Fall in der früheren Sprache so benannt? (Rekurs.)

Warum "printf" statt "writef"? Warum in anderen Sprachen als C "drucken" oder "schreiben" anstatt "anzeigen"?

Doug Treadwell
quelle

Antworten:

12

Printf ist "druckformatiert". Es hat dieselbe Wurzel wie "Drucken" in "Drucker", was für "Teleprinter", ein Synonym für "Teletypewriter", steht und wahrscheinlich aus der Zeit stammt, als Sie echte TTYs für die Interaktion mit Computern anstelle von Monitoren und Tastaturen verwendeten.

Scanf ist "scanformatiert" und entspricht dem "Druck" -Paradigma, verglichen mit der Verwendung von "Scanner" im Kontext von OCR. Man könnte auch annehmen, dass Lesen / Schreiben seit langer Zeit ein Paar von Systemaufrufen war, und auf die gleiche Weise, wie sich printf von write (2) unterscheidet, bestand der Wunsch, scanf von read (2) zu trennen.

antti.huima
quelle
5

"Lesen" erfordert tatsächlich das Verständnis dessen, was Sie betrachten. Im Gegensatz zu "Scannen", was im Grunde bedeutet, die Eingabe zu erfassen, werde ich später herausfinden, was damit zu tun ist.

Craig T.
quelle
Nett. Haben Sie eine Idee, ob dies vom Schöpfer der C-Sprache oder einer übergeordneten Sprache in Betracht gezogen wurde, oder ist dies nur etwas, das Sinn macht? Warum verwenden einige Sprachen Ihrer Meinung nach Print anstelle von Write oder Display?
Doug Treadwell
1
Ich denke, vieles davon hat seinen Ursprung in früheren Zeiten, als alles mit Lochkarten (und Steintafeln :) gemacht wurde. Wenn Sie in diesem Zusammenhang denken, ist Scannen / Drucken sinnvoller als Lesen / Schreiben.
Craig T
1
Ich bin nicht der Meinung, dass "Lesen" im rechnerischen Sinne das Verständnis dessen erfordert, was Sie betrachten. Ich glaube, es bedeutet, Einsen und Nullen blind von einem Ort zum anderen zu kopieren, zum Beispiel von der Festplatte in den Speicher. Es ist kein Verständnis beteiligt.
Thomas Dignan
Aus rechnerischer Sicht haben Sie Recht, aber nicht aus menschlicher Sicht.
Craig T
0

Dies ist eine Antwort, die nur "Intuition" ist. Der Name readf()setzt voraus, dass Sie bereits etwas zu lesen haben. Aber es gibt scanf()tatsächlich zwei Dinge zu tun: Warten Sie auf die Benutzereingabe (mit anderen Worten, scannen Sie den Eingabepuffer weiter, bis er etwas findet) und lesen Sie ihn dann. Beachten Sie, dass ich nicht beurteile, wie das Betriebssystem dies tatsächlich implementiert, sondern nur die konzeptionelle Operation beschreibe.

Ich weiß, dass Sie es mir sagen fscanf()und sscanf()dieser Idee nicht entsprechen, aber ich gehe davon aus, dass es sich um Erweiterungen handelt, scanf()und daher war es nur "normal", ihnen den gleichen Namen zu geben.

Übrigens, warum heißt du "Doug" und nicht "ABCD"? :-P

OmarOthman
quelle
Ich habe mich tatsächlich gefragt, ob es ein Seh-Sinn-Äquivalent zum "Zuhören" gibt. Wir können "hören", aber auch "zuhören", wir können "lesen", aber soweit ich weiß, gibt es kein Wort für "warten, bis jemand etwas schreibt und es dann liest". Vielleicht ist Scan dieses Wort.
Doug Treadwell
Aus dictionary.com Definition 3 des Scans: Ausschauen oder wiederholtes Beobachten oder Kehren als große Fläche; Umfrage.
Doug Treadwell
Diese Wörterbuchdefinition unterstützt also meine Behauptung, denke ich. Es ist nah an dem, was die Funktion tun soll.
OmarOthman