getc Vs getchar Vs Scanf用于从stdin读取字符

时间:2010-03-24 11:05:46

标签: c character scanf getchar getc

以下三个功能:

GETC getchar& scanf的

哪个是从stdin读取字符的最佳选择?为什么?

这些功能中是否存在任何已知的缺点或限制,使一个功能优于另一个功能?

2 个答案:

答案 0 :(得分:26)

如果您只想从stdin读取单个字符,那么getchar()是合适的选择。如果您的要求更复杂,那么getchar()就不够了。

  • getc()允许您从不同的流中读取(例如,使用fopen()打开的流);
  • scanf()允许您一次只阅读一个字符。

使用getchar()时最常见的错误是尝试使用char变量来存储结果。您需要使用int变量,因为值getchar()返回的范围是“unsigned char范围内的值加上单个负值EOF”。 char变量没有足够的范围,这可能意味着您可以将完全有效的字符返回与EOF混淆。这同样适用于getc()

答案 1 :(得分:5)

from Beej's Guide to C Programming

  

所有这些功能以这种或那种方式,读取单个字符   从控制台或文件。差异相当小,而且   这是描述:

     

getc()返回指定FILE中的字符。从用法   它的立场相当于fgetc()调用,而fgetc()是一个   看起来更常见。只执行了两个   功能不同。

     

fgetc()返回指定FILE中的字符。从用法   除了那个,它相当于相同的getc()调用   fgetc()有点常见。只有执行了   两个功能不同。

     

是的,我作弊并使用cut-n-paste来完成最后一段。

     

getchar()从stdin返回一个字符。事实上,它是一样的   调用getc(stdin)。