24

以下三个功能中:

getc getchar & scanf

哪个是从标准输入读取字符的最佳选择,为什么?

这些功能中的任何一个是否有任何已知的缺点或限制,从而使一个比另一个更好?

4

2 回答 2

31

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

  • getc()允许您从不同的流中读取数据(例如,一个以 开头的流fopen());
  • scanf()允许您一次阅读多个字符。

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

于 2010-03-24T11:13:35.070 回答
5

来自 Beej 的 C 编程指南

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

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

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

是的,我作弊并使用剪切粘贴来完成最后一段。

getchar() 从标准输入返回一个字符。其实和调用getc(stdin)是一样的。

于 2013-06-02T09:57:50.330 回答