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

Jay*_*Jay 23 c scanf character getchar getc

以下三个功能:

getc getchar&scanf

从stdin读取角色的最佳选择是什么?为什么?

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

caf*_*caf 26

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

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

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

  • 严重矫枉过正.在许多平台上,getchar()是一个快速返回一个字符(带有缓冲流)的宏,或者使用fread()来获取一个字符.使用scanf(),有很多不必要的工作. (2认同)

Dch*_*ris 5

来自Beej的C编程指南

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

getc()从指定的FILE返回一个字符.从使用的角度来看,它相当于相同的fgetc()调用,而fgetc()更常见.只有两个功能的实现不同.

fgetc()返回指定FILE中的字符.从使用的角度来看,它相当于相同的getc()调用,除了fgetc()更常见.只有两个功能的实现不同.

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

getchar()从stdin返回一个字符.实际上,它与调用getc(stdin)相同.