64,677
社区成员
发帖
与我相关
我的任务
分享
首先声明,我没有vs系列的编译器,所以,以下结果都是在ubuntu下的gcc version 4.4.5实验得到:
#include <iostream>
using namespace std;
int main()
{
int num;
cout<<"enter an interger:";
_exit(0);
cin>>num;
cout<<endl;
return 0;
}
运行后,没有任何输出,说明_exit没有进行输出缓冲区的刷新
#include <iostream>
using namespace std;
int main()
{
int num;
cout<<"enter an interger:";
cin>>num;
_exit(0);
cout<<endl;
return 0;
}
有数据输出,说明cin导致了cout的缓冲区刷新
#include <iostream>
using namespace std;
int main()
{
int num;
cout<<"enter an interger:";
cout << "\n";
_exit(0);
cin>>num;
cout<<endl;
return 0;
}
有输出,说明\n可以导致缓冲区的刷新
另外,将第三个程序重定向到文件中,则无输出(因为文件是全缓冲,而命令行是行缓冲)
但是将\n改为endl,则有输出(因为endl不仅输出换行,还强制刷新缓冲区)
再次强调:vs系列如何实现缓冲区的我不是很清楚,上面只是在gcc下实验得出。。。。
main()
{
int ch;
while ((ch=getchar()) != '\n' )
{
putchar(ch);
cout<<ch;
}
}
root@root-wpc:~$ ./a.out
root@root-wpc:~$ cat t.cpp
#include <iostream>
using namespace std;
int main()
{
int num;
cout<<"enter an interger:";
_exit(0);
cin>>num;
cout<<endl;
return 0;
}
root@root-wpc:~$ g++ t.cpp
root@root-wpc:~$ ./a.out
root@root-wpc:~$
root@root-wpc:~$ uname -a
Linux root-wpc 2.6.35-22-generic #33-Ubuntu SMP Sun Sep 19 20:34:50 UTC 2010 i686 GNU/Linux
root@root-wpc:~$ gcc -v
Using built-in specs.
Target: i686-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.4.4-14ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.4 --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
Thread model: posix
gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5)
root@root-wpc:~$
if (_Myios::tie() != 0)
_Myios::tie()->flush();
cin.tie(&cout);