【问题标题】:getc Vs getchar Vs Scanf for reading a character from stdingetc Vs getchar Vs Scanf 从标准输入读取字符
【发布时间】:2011-01-31 05:08:46
【问题描述】:

以下三个功能:

获取 获取字符 & 扫一扫

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

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

【问题讨论】:

    标签: c character scanf getchar getc


    【解决方案1】:

    from Beej's Guide to C Programming

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

    getc() 从指定的 FILE 返回一个字符。从用法 从观点上看,它相当于同一个 fgetc() 调用,而 fgetc() 是一个 很少见。只执行这两个 功能不同。

    fgetc() 从指定的文件中返回一个字符。从用法 观点,它等同于相同的 getc() 调用,除了 fgetc() 比较常见。只执行 两个功能不同。

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 感谢您的回复。在scanf中,如果我只给出%c,那么我应该只能读取一个字符吧?
      • 是的,但是为了这个目的它是矫枉过正的。
      • 严重矫枉过正。在许多平台上,getchar() 是一个宏,可以快速返回一个字符(带有缓冲流),或者使用 fread() 来获取一个字符。使用scanf(),有很多不必要的工作。
      • 先生,我有一些事情想问您,我们可以聊聊吗?
      猜你喜欢
      • 2010-12-29
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      • 2018-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多