在C++中真的需要fflush(stdin)吗?用这种方式刷新缓冲区中的换行符好吗?
发布于 2011-04-28 04:54:56
在C中,对fflush(stdin)的调用是未定义的行为(因此,在C++中也是如此)。
C语言标准ISO9899:1999在7.19.5.2/2中规定
如果流指向未输入最新操作的输出流或更新流,则fflush函数会导致要传递到主机环境的流的任何未写入数据都写入文件;否则,行为是未定义的
要丢弃直到行尾的整个输入,在C++中,最健壮的方法是
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');至于“闪烁并消失”这个程序,您是否正在Windows平台上执行控制台应用程序?这类应用程序最好从控制台窗口执行(开始->运行->cmd.exe)
发布于 2011-04-28 04:55:12
使用cin.get ()而不是getchar (),你应该没问题。问题是C++ I/O流和C I/O函数在相同的文件描述符上工作,但具有不同的缓冲区。我不知道在没有调试的情况下到底是怎么回事,但感觉就像你调用getchar()暂停程序,直到输入字符时,得到的字符已经被C++输入流读取了。所以它会获取数据并解锁,所以你可以退出程序。
如果您仍然有问题,请确保您没有输入‘\n’字符(即不要按enter)。因为在输入后按enter键实际上是一个可以阅读的字符。这个问题通常可以通过窥视来解决(参见http://www.cplusplus.com/reference/iostream/istream/peek/)。
发布于 2011-04-28 04:55:12
代码末尾的getchar()获取标准输入(输入缓冲区)中的下一个字符。如果那里没有字符,那么它将等待用户输入一些东西。fflush(stdin)清除输入缓冲区。
这就是为什么你的代码会等待,因为你清除了输入缓冲区,导致getchar等待用户的下一个输入。然而,看起来你在缓冲区上留下了一些东西,导致getchar‘获取’它,这结束了你的程序。
如果你想让程序在你完成后保持打开状态,那么就把同花顺留在那里。如果你想让它马上关闭,那就去掉同花边。
https://stackoverflow.com/questions/5810410
复制相似问题