C++ cout程序问题

来源:百度知道 编辑:UC知道 时间:2024/05/27 16:17:19
程序如下:

#include<stdio.h>
#include<conio.h>
#include<iostream.h>

int main()
{

cout<<"按任意键退出,谢谢使用!";
getch();

return 0;

}

两疑问:1:直间在Visual C++6.0工具下运行,一开始没显示,要敲一个键才开始显示
2:运行编译成的EXE程序,显示后没等待,一下就闪完哦

我换成用printf显示可以解决上面两个问题
现在问,为什么以上程序有这样的情况
1:是的当我加上endl就解决了以上两个问题,不需要在清空缓存区
但是,问下:endl就是换行的意思嘛(就如printf加\n一样嘛),我不加,为什么他就会留在缓存区啊,直到return才显示,请稍微详细解释下

2:我意思是,按程序的执行步骤,一开始就执行"cout<<"按任意键退出,谢谢使用!"这句语句,运行getch();等待敲键,然后return 0;,这么看来,怎么不加endl的话,程序一开始就不显示cout这条语句啊??

cout后没有endl,也就是有N多字符在缓冲区,又没有其它操作刷新这片缓冲,而此时紧跟getch,这个函数是直接从缓冲中获取一个字符并刷新缓冲,但是不显示出来该字符.前者没有刷新,后者获取到,此时又起到了刷新缓冲的作用.所以cout的字符显示了,而没有等待就结束了.

===========================
C++中的endl具有\n和刷新缓冲的双重作用.

必须清空缓冲区才会显示到屏幕上
你要明白,cout是屏幕输出缓冲区,而不是屏幕
cout<<"按任意键退出,谢谢使用!";
只是把数据输入到缓冲区,而不是到屏幕

就如同\n,只不过还附带清空缓冲区了
你要加上endl
不然就只在输出缓冲区里,直到return时才显示

运行exe时因为你没有清空缓冲区,所以最后一下回车还在缓冲区里,所以直接就出来了