为什么scanf称为scanf?(与printf相同。)


11

我很好奇,为什么在C编程语言中读取格式化输入的函数称为“ scanf”而不是“ readf”。我假设它是从较早的语言派生的,那么在那种情况下为什么要用较早的语言命名呢?(递归)

另外,为什么选择“ printf”而不是“ writef”?在非C语言中,为什么要“打印”或“写”而不是“显示”?

Answers:


12

Printf是“打印-格式化的”。它与“打印机”中的“打印”具有相同的根,“打印机”是“ teleprinter”的缩写,是“ teletypewriter”的同义词,并且可能源于您使用真正的TTY与计算机而不是显示器和键盘进行交互的时间。

Scanf是“扫描-格式化”的,并且与OCR上下文中“ scanner”的使用相匹配,并且与“ print”范例匹配。同样,可以假定读/写很长时间以来一直是一对系统调用,并且以与printf与write(2)不同的相同方式,一直希望将scanf与read(2)分开。


5

“阅读”实际上需要理解您正在看的东西。与“扫描”相反,“扫描”基本上意味着捕获输入,然后稍后我将弄清楚该怎么做。


真好 您是否知道这是C语言或父语言的创建者考虑的东西,还是仅仅是有意义的东西?另外,为什么您认为某些语言使用打印而不是书写或显示?
道格·崔德威尔

1
我认为很多原因都可以追溯到昔日的时代,当时所有事情都由打孔卡(和石碑:)制成。如果您认为在这种情况下,扫描/打印比读/写更有意义。
Craig T

1
我不同意计算意义上的“阅读”需要理解您正在看的东西。我相信这意味着将1和0从一个位置盲目复制到另一个位置,例如,从磁盘复制到内存。不涉及任何理解。
Thomas Dignan

从计算的角度来看,您是正确的,但从人类的角度来看,您是正确的。
Craig T

0

这只是“直觉”的答案。该名称readf()假定您已经有一些要读的东西。但是scanf()实际上有两件事要做:等待用户输入(换句话说,一直扫描输入缓冲区直到找到东西)然后再读取它。请注意,我没有判断操作系统是如何实际实现的,只是在描述概念性操作。

我知道您会告诉我fscanf()并且sscanf()与这个想法不符,但是我认为它们是对它们的扩展scanf(),因此给他们相同的名字只是“正常”。

顺便问一下,为什么您的名字是“ Doug”而不是“ ABCD”?:-P


我实际上是在想是否存在一个等同于“听”的视觉感知。我们可以“听”但也可以“听”,我们可以“读”,但据我所知,还没有“等待某人写东西然后读它”的字眼。也许扫描就是这个词。
Doug Treadwell

从dictionary.com的定义3扫描:大范围地凝视或反复观察或大范围地观察;调查。
Doug Treadwell

因此,这个字典定义支持我的猜测。它接近该函数应该执行的操作。
奥马尔·奥斯曼(OmarOthman)2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.