2014-02-24 57 views

回答

6

你可能被告知fflush(stdin)是未定义的,这是正确的。但是fflush是您想要刷新的其他流的路线,例如stdout

为了澄清,该流必须用于输出。该标准说:

如果流点到输出流或其中 最近的操作不是输入的更新流,fflush函数使该流的任何 未写入的数据被传递到主机环境将 写入文件;否则,行为是不确定的。

后来的标准包括这种明确为“未指定的行为”:

流为fflush函数指向一个输入流或到 更新流其中最近一次操作是输入

+0

驱动器downvoter:我很担心你。现在来评论,我们可能仍然能够帮助你。 – cnicutar

4

您误会了。

上的输入流调用fflush()已至于C标准而言有些系统和/或二级标准,如POSIX可以定义其行为未定义的行为,但它不是依靠在代码是个好主意这是为了便携。

在输出流上调用fflush(),例如fflush(stdout),是完全安全和明确的。它会导致任何挂起的输出被传送到操作系统(不保证它将被传送到物理输出设备)。

在某些情况下,在输入流上调用fflush时,实际上应该读取并放弃输入字符,例如,直到看到换行符'\n'EOF。或者,通常更好的方法是使用fgets或类似的方法一次读取整行,然后解析输入。

+0

+1只要最后一个操作符是'out',而不是'in',它就可以被调用到输入输出流中(我还记得,我还记得,从'out'到''in'ops *要求* fflush()'*或* seek-op。如果我记错了,我会提前道歉,因为我很少发现自己在全模式下操作文件。 – WhozCraig

+0

但我的大学教授教我这是好的,我很困惑,因为它与输入流很好地工作 – YakRangi

+1

@Bayant_singh如果你的大学教授教你'fflush()只输入流是好的和好的,你不是唯一的应该在寻求教育,它可能在你的平台上“工作”,但不要指望它“作为”一种基于语言标准的规则。 – WhozCraig

相关问题