endl和'/n'

来源:互联网 发布:淘宝如何举报卖家 编辑:程序博客网 时间:2024/05/21 06:18

1.endl是一个特殊值,称为操纵符,将它写入输出流时,不仅具有输出换行的效果,而且它刷新与设备关联的缓冲区,通过刷新缓冲区,用户可立即看到写入到流中的输出;'/n'仅仅是一个换行符,将它写入到输出流时,只能起到一个换行的作用,不能刷新输出。 因此建议,在能用cout < <endl;的形式时不要用cout < <"/n"形式。 程序员经常在调试过程中插入输出语句,这些语句都应该刷新输出流。忘记刷新输出流可能会造成输出信息停留在缓冲区,如果程序崩溃,将会导致对程序崩溃位置的错误判断。

2.

#include "stdafx.h"
#include <iostream>
#include <iomanip>


int _tmain(int argc, _TCHAR* argv[])
{
 std::cout << std::setw(10) << std::setfill('*') << std::endl;    // (1)
 std::cout << std::setw(10) << std::setfill('*') << '/n';             // (2)
 return 0;
}

 

关于“第一行什么也没输出,第二行输出”的一个应该是正确的解释:

    endl为put('/n')   +   flush(),有的系统上换行符不是'/n',另当别论。而put()不能使用setw()和setfill()指定格式,所以只是单纯的输出一个字符,所以第一行没有输出。   这个和flush无关,flush只是强迫输出,并不清理标志。   

转自http://blog.csdn.net/mengxiangying504/article/details/4768435


原创粉丝点击