Почему scanf называется scanf? (То же самое для printf.)

11

Мне просто любопытно, почему в языке программирования C функция чтения форматированного ввода называлась «scanf», а не «readf». Я предполагаю, что он получен из более раннего языка, поэтому в таком случае почему он был назван так в более раннем языке? (Recurse.)

Кроме того, почему «printf», а не «writef»? На языках, отличных от C, почему «печатать» или «писать», а не «показывать»?

Даг Тредвелл
источник

Ответы:

12

Printf "отформатирован для печати". Он имеет тот же корень, что и «print» в «printer», что является сокращением для «teleprinter», синонима «teletypewriter», и, скорее всего, происходит с того времени, когда вы использовали настоящие TTY для взаимодействия с компьютерами вместо мониторов и клавиатур.

Scanf имеет формат «отсканированный» и соответствует парадигме «печать», по сравнению с использованием «сканера» в контексте OCR. Кроме того, можно предположить, что чтение / запись были парой системных вызовов в течение длительного времени, и так же, как printf отличается от write (2), было желание отделить scanf от read (2).

antti.huima
источник
5

«Чтение» на самом деле требует понимания того, на что вы смотрите. В отличие от «Сканирования», которое в основном означает захват ввода, я выясню, что делать с ним позже.

Крейг Т
источник
Ницца. Есть ли у вас какие-либо идеи, рассматривал ли это создатель языка C или родительский язык, или это просто имеет смысл? Кроме того, как вы думаете, почему некоторые языки используют печать вместо записи или отображения?
Даг Тредвелл
1
Я думаю, что многое из этого берет свое начало в былые времена, когда все было сделано с перфокартами (и каменными табличками :) тоже). Если вы думаете, что в этом контексте сканирование / печать имеет больше смысла, чем чтение / запись.
Крейг Т
1
Я не согласен, что «чтение» в компьютерном смысле требует понимания того, на что вы смотрите. Я считаю, что это означает слепое копирование 1 и 0 из одного места в другое, например, с диска в память. Здесь нет понимания
Томас Диньян
С вычислительной точки зрения вы правы, но не с человеческой точки зрения.
Крейг Т
0

Это ответ, который просто «интуиция». Название readf()предполагает, что у вас уже есть что почитать. Но на scanf()самом деле нужно сделать две вещи: дождаться пользовательского ввода (другими словами, продолжать сканировать буфер ввода, пока он что-то не найдет), а затем прочитать его. Обратите внимание, что я не оцениваю, как в действительности это реализует операционная система, я просто описываю концептуальную операцию.

Я знаю, что вы скажете мне fscanf()и sscanf()не соответствует этой идее, но я предполагаю, что они являются расширениями, scanf()и поэтому было просто «нормально» давать им одно и то же имя.

Кстати, почему тебя зовут "Даг", а не "ABCD" ?? :-П

OmarOthman
источник
Я действительно задавался вопросом, был ли смысл-эквивалент, эквивалентный «слушать». Мы можем «слышать», но также «слушать», мы можем «читать», но, насколько я знаю, нет слова «ждать, пока кто-нибудь что-то напишет, а затем прочитает». Возможно, сканирование это слово.
Даг Тредвелл
Из словаря слова 3 определение сканирования: смотреть или наблюдать неоднократно или быстро, как большое пространство; опрос.
Даг Тредвелл
Итак, это словарное определение поддерживает мое утверждение, я думаю. Это близко к тому, что функция должна делать.
ОмарОтман