为什么这段代码没有产生预期的输出?
Why is this code not producing expected output?
#include<iostream>
using namespace std;
#define sp ' '
std::ostream& nl(std::ostream os)
{
return os << '\n';
}
int main()
{
cout << 1 << sp << 2 << nl;
cout << 3 << sp << 4 << sp;
cin.get();
cout << 5 << sp << 6 << nl;
cin.get();
cout << 7 << sp << 8;
return 0;
}
我正在测试我自己的流操纵器,它添加换行符但不刷新。
我期望在程序结束之前没有输出,因为 cout 应该只在程序结束时 flush
而没有 endl
。而且我期望输出为
1 2
3 4
// newline added here and cin.get() executed adding another newline
5 6
// newline added here and cin.get() executed adding another newline
7 8
但是我得到了这个。
1 2007818983 4 // cin.get() executed here in this line
5 600781898 //cin.get() executed here again
7 8
这是为什么?在 Visual Studio 2019 年的调试期间,有什么方法可以查看调试器中的 cout、cin 或任何流的缓冲区,以了解发生了什么?
问题出在 nl
函数中。您必须通过引用传递 ostream
。看看这段代码
// Pass by Ref
std::ostream& nl(std::ostream& os){
os << '\n';
return os;
}
#include<iostream>
using namespace std;
#define sp ' '
std::ostream& nl(std::ostream os)
{
return os << '\n';
}
int main()
{
cout << 1 << sp << 2 << nl;
cout << 3 << sp << 4 << sp;
cin.get();
cout << 5 << sp << 6 << nl;
cin.get();
cout << 7 << sp << 8;
return 0;
}
我正在测试我自己的流操纵器,它添加换行符但不刷新。
我期望在程序结束之前没有输出,因为 cout 应该只在程序结束时 flush
而没有 endl
。而且我期望输出为
1 2
3 4
// newline added here and cin.get() executed adding another newline
5 6
// newline added here and cin.get() executed adding another newline
7 8
但是我得到了这个。
1 2007818983 4 // cin.get() executed here in this line
5 600781898 //cin.get() executed here again
7 8
这是为什么?在 Visual Studio 2019 年的调试期间,有什么方法可以查看调试器中的 cout、cin 或任何流的缓冲区,以了解发生了什么?
问题出在 nl
函数中。您必须通过引用传递 ostream
。看看这段代码
// Pass by Ref
std::ostream& nl(std::ostream& os){
os << '\n';
return os;
}