注册 登录
编程论坛 C++教室

请问printf()和cout的区别,具体看实例

yfeng_2008 发布于 2008-03-04 00:19, 2725 次点击
#include<stdio.h>
#include<iostream.h>
void main()
{
for(int i=0;i<5;i++)
{
print("+++++++++++++++++++\n");
cout<<"===================\n";
}
}
同时将上题中的cout<<"=============|n";改成cout<<"============"<<endl;结果又有所不一样
请知道的帮我说明一下为什么会出现这种现象,同时讲一下printf()和cout的区别
10 回复
#2
sunkaidong2008-03-04 09:09
你自找找啊,cout是输出类,printf是函数,没怎么研究过..你自己找一下啊....
#3
yfeng_20082008-03-04 20:20
请楼上的说明原因吧,要是查资料还要在这里提问吗?你说cout是输出类,printf是标准输出函数,这个大家都知,我只想知道出现那样的结果为什么,教材上说\n和endl是一样的?
#4
sunkaidong2008-03-04 20:22
每研究过这个问题....看看算法吧..这个比较有意义
#5
yfeng_20082008-03-04 20:56
我看过一些资料,说COUT输出后进入缓冲区,是不是\n是一个转义字符,也就是相当于一个普通字符,而endl是一个运算符(在刷新缓冲区)所以循环一次就刷新一次,而用\n时没有刷新,最后一次性输出
#6
hylhp2008-03-05 14:30
cout<<"-------"<<'\n';
cout<<"-------"<<endl;
效果一样的,输出后换行
#7
yfeng_20082008-03-11 22:59
cout<<"-------\n";
cout<<"-------"<<endl;
就不一样吧
#8
xianshizhe1112008-03-12 18:46
/*这样研究一下,看看结果*/
/*与编译器也有差别 DEV-C++ 隔行, VC++ 6.0先把cout输出存入系统,到printf 全部输出之后再输出*/
#include<stdio.h>
#include<iostream.h>
int main()
{
for(int i=0;i<5;i++)
{
printf("+++++++++++++++++++\n");
/*cout<<"==================="<<endl;*/
cout<<"===================\n";
}
getchar();
return 0;

}
#9
yfeng_20082008-03-18 23:51
大家谈谈自己的想法,这是为什么?
#10
PcrazyC2008-03-19 12:42
1.C语言中的输出方式不会等缓存区满,缓存区中是什么就输出什么.
而C++输出流则不同,当缓存区没满时,将输出的内容保存在缓存区中,一旦缓存区满了,就会将其一起输出,这样就能提高输出很多内容的效率,至于缓存区的大小就不用管了,楼主可以试一下下面的程序,A,B会一段段的交替输出来,在输出B的时候就是缓存区满的时候.

程序代码:
#include<iostream.h>
#include<stdio.h>

int main()
{
    
    char a[1024]="aaaaaaaaaaaaaaaaaaaaaa";
    char b[1024]="bbbbbbbbbbbbbbbbbbbbbb";
    for(int i=0;i<512;i++)
    {
        printf("%s\n",a);    //这是C语言中的输出函数stdio.h中
        cout<<b<<"\n";        //这是C++的输出函数,在iostream.h中
                  //cout<<b<<endl;      //这里的endl会清空缓存
    }
    return 0;
}


上面会出现这种情况主要是因为楼主使用旧版本的头文件,这里面没有PRINTF之类的输出函数,而新版本将PRINTF之类 的函数都包含了进来.上面相当于是两个版的输出流的一个对比.

2.\n和endl这区别在于:
\n只是简单的插入一个换行符而endl则插入一个换行符后再清空缓存(MSDN中有这么一段:
endl:This manipulator, when inserted into an output stream, inserts a newline character and then flushes the buffer.)
所以当使用endl时,不会等到缓存区满再输出,因为在清除缓存前必须将缓存中的内容输出来.这是很显然的
#11
zkkpkk2008-03-20 13:05
[bo]以下是引用 [un]sunkaidong[/un] 在 2008-3-4 09:09 的发言:[/bo]

你自找找啊,cout是输出类,printf是函数,没怎么研究过..你自己找一下啊....

cout他是一个对象
<<他是一个重载运算符
cout.<<("===========");成立
1