fflush(标准输入法)的替代方案? 是FFLUW(STDIN),在C++中确实需要这样做,这样做是好的,在缓冲区中刷新换行符? < P>调用到 FFLUW(STDIN)< /C>是C中的未定义行为(以及C++中的)。

fflush(标准输入法)的替代方案? 是FFLUW(STDIN),在C++中确实需要这样做,这样做是好的,在缓冲区中刷新换行符? < P>调用到 FFLUW(STDIN)< /C>是C中的未定义行为(以及C++中的)。,c++,C++,C语言标准ISO 9899:1999规定了7.19.5.2/2 If流指向输出流或更新流,其中最近的 未输入操作,fflush函数会导致该流的任何未写入数据 发送到主机环境并写入文件;否则,该行为是错误的 未定义 将整个输入丢弃到下一行的结尾,在C++中,最稳健的方法是 std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); std::cin.ignore(std::numeric_limits::ma

C语言标准ISO 9899:1999规定了7.19.5.2/2

If流指向输出流或更新流,其中最近的 未输入操作,fflush函数会导致该流的任何未写入数据 发送到主机环境并写入文件;否则,该行为是错误的 未定义

将整个输入丢弃到下一行的结尾,在C++中,最稳健的方法是

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cin.ignore(std::numeric_limits::max(),'\n');
至于“闪动和消失”程序,您是否正在Windows平台上执行控制台应用程序?这样的应用程序最好在控制台窗口(Start->run->cmd.exe)中执行。

代码末尾的
getchar()
将获取stdin(输入缓冲区)中的下一个字符。如果那里没有字符,那么它将等待用户输入一些内容。fflush(stdin)清除输入缓冲区

这就是为什么如果有fflush,代码将等待,因为您正在清除输入缓冲区,导致getchar等待用户的下一个输入。但是,看起来您在缓冲区中留下了一些内容,导致getchar“获取”它,从而结束您的程序

如果您希望程序在完成后保持打开状态,请将刷新保留在那里。如果您希望它立即关闭,则移除冲洗。

使用
cin.get()
而不是
getchar()
,您应该会没事的。问题是C++ I/O流和C/I/O函数在同一文件描述符的顶部工作,但具有不同的缓冲区。我无法知道W/O调试的具体内容,但它感觉像是<代码> GETCHARE()/<代码>,您正在暂停程序,直到输入的字符正在获得已经由C++输入流读取的字符。所以它获取数据并解除阻塞,所以你退出程序


如果仍然存在问题,请确保不输入“\n”字符(即不按enter键)。因为输入后按enter键实际上是一个可以读取的字符。这个问题通常通过窥视来解决(请参阅)。

您不应该为输入流调用fflush。你也不应该把C和C++ I/O混合起来。这工作很难,我不理解它:STD::MultIcILimeLim:::()(什么是Max限制),什么是流siZi?如果它是最健壮的,那么我应该使用它?但是?穆克什?它是代码< >流大小< /代码>的对象的最大值,streamsize是流中字节数的度量单位。你也可以把一些任意的大数字,比如说
cin.ignore(100,“\n”),但如果有人决定搞笑,并且在最后一次输入后输入了超过100个垃圾字符,那么您的程序仍然会“闪烁并消失”。没有人能输入超过
数值限制::max()
谢谢,库比我感谢你的帮助。