【问题标题】:What is the difference between putc and ungetc?putc 和 ungetc 有什么区别?
【发布时间】:2011-05-21 05:23:38
【问题描述】:

int ungetc(int c, FILE *fp) 将字符 c 推回 fp,并返回 c 或 EOF 以表示错误。

其中 as int putc(int c, FILE *fp) 将字符 c 写入文件 fp 并返回写入的字符,或 EOF 表示错误。

//这些是来自 K&R 的声明。我发现自己很困惑,因为putc() 可以在getc 之后使用,并且可以作为ungetc 工作。那么具体定义ungetc()有什么用呢。

【问题讨论】:

    标签: c++ c function


    【解决方案1】:

    putc 将某些内容写入输出,因此它会出现在屏幕上或您将输出重定向到的文件中。

    ungetc 把一些东西放回 input 缓冲区,所以下次你调用getc(或fgetc,等等)时,你会得到。

    您通常使用putc 来写入输出。当你阅读输入时,你通常使用ungetc,而你知道你已经到达某事结尾的唯一方法是当你读到一个不能成为当前“某事”一部分的字符时。例如,您正在读取和转换一个整数,您会一直继续,直到您读取到除数字以外的其他内容 - 然后您 ungetc 将该非数字字符作为来自流的下一个内容进行处理。

    【讨论】:

    • 感谢这样的解释性答案..:)
    【解决方案2】:

    ungetc 适用于为读取而打开的流,并且不会修改原始文件。 putc 作用于为写入而打开的流,并实际将字节写入文件。

    【讨论】:

      【解决方案3】:

      如果您对流 fp 执行 ungetc,然后再次执行 getc,您将返回刚刚输入的相同字符。如果您执行 putc,“流继续前进”,如果有任何东西,随后的getc 将得到它之后的任何东西...... getcungetc 用于“窥视”并在处理字符时出现特殊情况时将其放回去,例如

      【讨论】:

      • 在 putc 之后,如果我执行 getc,我不会得到我刚刚输入的相同字符...因为它只是文件指针指向的位置...不是吗?
      • 是的,putc 将文件指针移动到该字符之后,即输出缓冲区,并且确实(正如 Jerry 所说)ungetc 放回输入缓冲区(它们可能是相同的,这是什么我假设)
      • 是的,所以主要区别在于 ungetc 放入输入缓冲区,而 putc 将其放入输出缓冲区...
      • 不仅如此,ungetc 还确保文件指针停留在那个地方,而在 putc 之后它会移动一个。下一个 putc 将放置在此之后(如果您中间什么都不做)。
      猜你喜欢
      • 2010-10-02
      • 2011-12-12
      • 2010-09-16
      • 2012-03-14
      • 2012-02-06
      • 2011-02-25
      • 2011-11-22
      • 2015-03-26
      • 2013-08-19
      相关资源
      最近更新 更多