【发布时间】:2011-01-31 05:08:46
【问题描述】:
以下三个功能:
获取 获取字符 & 扫一扫
哪个是从标准输入读取字符的最佳选择,为什么?
这些功能是否有任何已知的缺点或限制,从而使一个比另一个更好?
【问题讨论】:
标签: c character scanf getchar getc
以下三个功能:
获取 获取字符 & 扫一扫
哪个是从标准输入读取字符的最佳选择,为什么?
这些功能是否有任何已知的缺点或限制,从而使一个比另一个更好?
【问题讨论】:
标签: c character scanf getchar getc
from Beej's Guide to C Programming
所有这些功能都以一种或另一种方式读取单个字符 从控制台或文件。差异相当小,并且 以下是描述:
getc() 从指定的 FILE 返回一个字符。从用法 从观点上看,它相当于同一个 fgetc() 调用,而 fgetc() 是一个 很少见。只执行这两个 功能不同。
fgetc() 从指定的文件中返回一个字符。从用法 观点,它等同于相同的 getc() 调用,除了 fgetc() 比较常见。只执行 两个功能不同。
是的,我作弊并使用剪切粘贴来完成最后一段。
getchar() 从标准输入返回一个字符。事实上,它是一样的 调用 getc(stdin)。
【讨论】:
如果您只是想从标准输入读取单个字符,那么getchar() 是合适的选择。如果您有更复杂的要求,那么getchar() 就不够用了。
getc() 允许您从不同的流中读取(例如,使用fopen() 打开的流);scanf() 允许您一次读取多个字符。使用getchar() 时最常见的错误是尝试使用char 变量来存储结果。您需要使用int 变量,因为getchar() 返回的值范围是“unsigned char 范围内的值,加上单个负值EOF”。 char 变量没有足够的范围,这可能意味着您可以将完全有效的字符返回与 EOF 混淆。这同样适用于getc()。
【讨论】: