★
printf 无缓冲,cout 有缓冲;
缓冲刷新的时刻有:
1. 缓冲区满;
2. 输出 endl;
3. 显式调用 flush 函数;
4. 程序结束时。
★
C 中缓冲设置相关的函数:setbuf()
★
cout.setf(ios::stdio);
上述语句让 iostream 和 stdio 共用一个缓冲。
★
程序1:
////////////////////////////////////
#include "iostream.h"
#include "stdio.h"
int main()
{
cout << "ok1";
printf("%s", "ok");
cout << "ok2";
return 0;
}
////////////////////////////////////
程序1在 vc 6.0 里的输出结果为:
okok1ok2
其原因是:cout << "ok1"; 的时候没有刷新缓冲区,而 printf 输出后就刷新了。当 cout << "ok2"; 的时候,缓冲仍然没有被刷新。直到退出程序的时候,iostream 才刷新它的缓冲。所以 cout 的输出在 printf 后面。如果要顺序输出的话,在 cout 语句最后加上 << endl (cout << "ok1" << endl;),endl 会刷新缓冲的。
在 gcc 和 vs.net 中的输出正常,如下:
ok1okok2
程序2:
////////////////////////////////////
#include "iostream.h"
#include "stdio.h"
int main()
{
cout << "ok1";
printf("%s", "ok");
cout << "ok2";
for (int i = 1; i = 1; )
{
;
}
return 0;
}
////////////////////////////////////
程序2在 vc 6.0 里的输出结果为:
ok
其原因是:程序最后有个无限循环,所以cout没有机会被刷新(一般程序退出的时候 cout 会被刷新缓冲)。
在 gcc 和 vs.net 中的输出正常,如下:
ok1okok2
★
在多线程中用 printf 的话,其中的内容往往能在一个时间片内输出;而如果用 cout 的话,就不能够保证是否能在一个时间片内输出,即使加了 flush 或 endl 也一样。
参考:
1. http://topic.csdn.net/t/20020707/12/855968.html
2. http://bbs.sjtu.edu.cn/bbsanc,path,%2Fgroups%2FGROUP_1%2FACMICPC%2Ftemporary%2FD4D425840%2FM.1054035254.A.html
3. http://community.csdn.net/Expert/TopicView3.asp?id=5030264
分享到:
相关推荐
例如,`iostream`库提供了流式输入输出,`std::cin`用于从标准输入读取,`std::cout`用于标准输出;`vector`和`list`是两种常用的容器,它们存储和操作动态大小的元素集合;`algorithm`库包含了各种算法,如排序、...
本主题聚焦于"C/C++算法实现多路PCM混音源码",这是一个关于音频混合的技术,涉及到数字信号处理(DSP)的基础知识,C/C++编程语言的应用,以及特定的PCM音频格式的理解。 PCM(Pulse Code Modulation,脉冲编码...
- **说明**: 用于清除文件流的错误状态标志,便于重新进行输入输出操作。 ##### 18. `clock()` - **定义**: `#include <time.h>` - **功能**: 获取程序运行时间。 - **说明**: `clock()` 返回自程序启动以来经过的 ...
标题 "NI采集卡 Linux下C/C++语言demo" 涉及到的是使用National Instruments(NI)的DAQmx(数据采集和测量系统)驱动在Linux操作系统中进行数据采集的编程实践。NI采集卡是一种用于实验测量和控制的硬件设备,能够...
对于ACM竞赛来说,熟悉标准输入输出(scanf/printf)、快速读写技巧(如cin/cout的缓冲区管理)以及时间复杂度分析都是必不可少的。 总之,这个压缩包可能包含了作者在学习C++或参加ACM比赛过程中编写的代码,通过...
在C/C++编程中,理解缓冲的概念对于优化程序性能至关重要。缓冲主要分为全缓冲(Full Buffering)、行缓冲(Line Buffering)和无缓冲(No Buffering)三种类型。 1. **全缓冲**: 全缓冲模式下,数据会被存储在一...
- **用途**:提供了基于字符串缓冲区的输入输出功能。 - **示例**: ```c++ #include #include int main() { char buffer[100]; sprintf(buffer, "Result: %d", 42); printf("%s\n", buffer); return 0; ...
- **打开文件**:在C++中,`fstream`库提供了`ifstream`(输入流)、`ofstream`(输出流)和`fstream`(双向流)类来处理文件。使用`open()`函数可以打开文件,如`ifstream file("filename.txt"); file.open();`。 ...
在C或C++中实现Base64编解码可以帮助开发者处理这些场景。本节将深入探讨Base64的概念、工作原理以及如何用C/C++进行实现。 1. **Base64概念** Base64是一种将任意二进制数据转换为可打印ASCII字符的编码方法。它...
`iconv()`接受输入缓冲区、输入缓冲区长度、输出缓冲区、输出缓冲区长度等参数,并返回转换后的新长度。如果转换成功,`iconv()`会更新输入和输出缓冲区的指针。例如: ```c++ char* inbuf = ...; // 输入GBK编码的...
5. **标准库和POSIX接口**:C和C++标准库提供了大量的通用函数,如内存管理、输入/输出操作等。POSIX(Portable Operating System Interface)接口为Linux提供了与操作系统交互的一致性接口,如进程控制、线程管理、...
gSOAP编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现,从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多。绝大多数的C++web服务工具包提供一组API函数类库来处理特定的SOAP数据结构,这样就使得用户...
Linux支持标准C++库(如libstdc++),并可以通过`<iostream>`、`<fstream>`等头文件实现输入/输出流,`<vector>`、`<map>`等容器用于数据结构,以及`<thread>`和`<mutex>`用于多线程编程。同时,C++的模板机制允许...
例如,`iostream`库提供了`cin`和`cout`用于输入输出操作,`string`类用于方便地处理字符串,`vector`和`array`等容器类则用于存储和操作动态数据集合。此外,C++标准库还包含了大量的算法,如`sort`、`find`、`...
例如,M-x compile可以调用系统编译器,并在Emacs的缓冲区中显示编译输出,方便查看错误。gdb集成则允许在Emacs内直接调试程序,使用gud-gdb或ede/gdb等模式,可以设置断点、单步执行、查看变量值等。 为了提高代码...
C语言的标准库(stdio.h, string.h, math.h等)包含了各种基础操作,如输入输出、字符串处理、数学运算等。例如,`printf`函数用于格式化输出,`scanf`用于从标准输入读取数据;`strcpy`和`strcat`处理字符串复制和...
7. **文件操作**:读写文件、流缓冲、格式化输入输出等是C/C++中常见的I/O操作,面试中可能会设计到文件的打开、关闭、读写模式等。 8. **编译与链接**:了解编译器的工作原理、预处理、编译、汇编、链接过程,以及...
9. **安全性和性能**:AES算法因其高效性和安全性被广泛采用,但C/C++实现时需要注意防止缓冲区溢出、密钥管理不当等潜在的安全隐患。优化的实现可以提高加密和解密的速度,适应实时和大数据量的加密需求。 通过...