Чому scanf називається scanf? (Те саме для printf.)


11

Мені просто цікаво, чому в мові програмування на C функція читання форматованого входу називалася "scanf" на відміну від "readf". Я припускаю, що це походить від більш ранньої мови, тож у такому випадку чому його назвали таким чином у більш ранній мові? (Рекурс.)

Крім того, чому "printf", а не "writef"? Чому іншими мовами, ніж C, чому "друкувати" чи "писати", а не "відображати"?

Відповіді:


12

Printf "друкується у форматі". Він має той самий корінь, що і «друк» у «принтері», що є скороченням для «телепринтера», синонімом «телетекстописця», і походить, ймовірно, з того часу, коли ви використовували справжні TTY для взаємодії з комп'ютерами замість моніторів та клавіатур.

Scanf є "сканованим форматом" і відповідає парадигмі "print", порівняйте з використанням "сканера" ​​в контексті OCR. Крім того, можна припустити, що читання / запис давно є парою системних викликів, і так само, як printf відрізняється від запису (2), виникло бажання відокремити scanf від read (2).


5

"Читати" насправді вимагає розуміння того, що ти дивишся. На відміну від "Сканування", який в основному означає зафіксувати вхід, я потім зрозумію, що з ним робити пізніше.


Приємно. Чи маєте ви ідею, чи це щось вважав автор мови С або батьківська мова, чи це просто щось, що має сенс? Крім того, чому, на вашу думку, деякі мови використовують друк замість того, щоб писати чи відображати?
Doug Treadwell

1
Думаю, багато з цього бере свій початок ще в часи, коли все робилося з перфокартами (і кам'яними табличками :) теж). Якщо ви думаєте, що в цьому контексті сканування / друк має більше сенсу, ніж читання / запис.
Крейг T

1
Я не згоден, що "читати" в обчислювальному сенсі вимагає розуміння того, що ти дивишся. Я вважаю, що це означає сліпо копіювати 1 і 0 з одного місця в інше, наприклад, з диска в пам'ять. Немає розуміння.
Томас Дігнан

З комп’ютерного почуття ви праві, але не з людського почуття.
Крейг T

0

Це відповідь, яка є просто "інтуїцією". Назва readf()передбачає, що ви вже маєте щось прочитати. Але scanf()насправді є дві речі: зачекати на введенні користувача (іншими словами, продовжуйте сканувати вхідний буфер, поки він щось не знайде), а потім прочитайте його. Зауважте, що я не суджу, як насправді це реалізує операційна система, я лише описую концептуальну операцію.

Я знаю, що ви скажете мені fscanf()та sscanf()не відповідають цій ідеї, але я припускаю, що вони є розширеннями, scanf()і тому було просто "нормально" дати їм те саме ім'я.

До речі, чому тебе звуть "Дуг", а не "ABCD" ?? :-P


Мені насправді було цікаво, чи є приціл-сенс-еквівалент "слухати". Ми можемо «чути», але також «слухати», ми можемо «читати», але, наскільки я знаю, немає слова «чекати, коли хтось щось напише, а потім прочитає». Можливо, скан це слово.
Дуг Тредвелл

З word.com визначення 3 сканування: дивитися на або спостерігати повторно чи підмітно, як велику простору; опитування.
Дуг Тредвелл

Отже, це визначення словника підтримує моє твердження. Це близько до того, що функція повинна виконувати.
ОмарОтман
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.