默认情况下,标准输入设备与标准输出设备绑定在一起,格式如下:
std :: cin.tie(& std :: cout);这保证输入缓冲区在调用输入之前被刷新.所以我试图通过使用std :: cin.tie(0)来解开它们,但似乎结果与绑定没有任何区别.
std :: cin.tie(& std :: cout);这保证输入缓冲区在调用输入之前被刷新.所以我试图通过使用std :: cin.tie(0)来解开它们,但似乎结果与绑定没有任何区别.
#include<iostream> using namespace std; int main(int argc,char *argv[]) { char c; cin.tie(0) cout << "Please enter c:"; cin >> c; cout << c ; return 0; }
我测试错了吗?为什么我们需要把它们捆在一起?他们共享相同的缓冲区吗?
解决方法
您的示例中没有错误(除了您应该在cin.tie(0)行之后添加分号),也不用iostream对象的工作方式.
tie()只是在cin执行输入之前保证cout的刷新.这对于用户在被问到答案之前看到这个问题是有用的.
但是,如果你从cout中取消()cin,那么不能保证cout的缓冲区被刷新.但是不能保证缓冲区没有被冲洗掉.事实上,如果计算机有足够的资源,它将立即刷新cout缓冲区,所以这是在cin请求输入之前发生的.在你的例子中就是这样.
所以,一切都很好.除了cin.tie(0)之外,不能保证会发生冲水.然而,在99%的情况下,冲洗仍然会发生(但不再保证).
在理论上,如果被绑定,cin和cout可以共享相同的缓冲区.但是,我认为没有这样做.一个原因是两个可能是不相关()d.