C/C++中printf/cout 计算顺序与缓冲区问题

简介: 1.printf/cout在同一个语句中都是从右向左计算的。 看如下的代码: 1 #include 2 int main() 3 { 4 int i=0; 5 printf("%d %d",i++,i++); 6 printf(" %d",i++); 7 return 0; 8 } 输出结果: 1 0 2 (第5行,先计算右边的i++,再计算左边的i++。

1.printf/cout在同一个语句中都是从右向左计算的

看如下的代码:

1 #include <stdio.h>
2 int main()
3 {
4     int i=0;
5     printf("%d %d",i++,i++);
6     printf(" %d",i++);
7     return 0;
8 }

输出结果:

1 0 2

(第5行,先计算右边的i++,再计算左边的i++。所以输出时1 0)

2.printf/cout 有行缓冲区

直到缓冲区满,或者遇到换行符,或者程序结束,或者刷新缓存,才进行输出。

C使用fflush(stdout)刷新缓冲区;C++中使用cout.flush()刷新缓冲区。

看如下的代码:

 1 #include <iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int i=0;
 6     cout<<i++<<","<<i++;
 7     //cout.flush(); //刷新缓冲区
 8     while(1){
 9         //break;
10     }
11     return 0;
12 }

执行程序(linux):

  没有任何输出,因为没有遇到换行符、程序也没有结束。

把第7行的注释取消掉,进行刷新缓冲区就可以看到执行结果:

  1 0

 

参考链接:

http://hi.baidu.com/wjtk007/item/5eb65c03c0dd97066c9048c7

相关文章
|
6月前
|
存储 并行计算 前端开发
【C++ 函数 基础教程 第五篇】C++深度解析:函数包裹与异步计算的艺术(二)
【C++ 函数 基础教程 第五篇】C++深度解析:函数包裹与异步计算的艺术
72 1
|
6月前
|
数据安全/隐私保护 C++ 容器
【C++ 函数 基础教程 第五篇】C++深度解析:函数包裹与异步计算的艺术(一)
【C++ 函数 基础教程 第五篇】C++深度解析:函数包裹与异步计算的艺术
105 0
|
6月前
|
存储 编译器 C++
在C++语言中计算并打印出两个数的求和
在C++语言中计算并打印出两个数的求和
276 0
|
6月前
|
存储 算法 编译器
探索C++中的模板元编程:一种编译时计算的强大工具
探索C++中的模板元编程:一种编译时计算的强大工具
62 0
|
6月前
|
存储 自然语言处理 算法
【编译原理】逆波兰式的产生及计算:C/C++实现
【编译原理】逆波兰式的产生及计算:C/C++实现
156 0
|
3月前
|
C++
C++ 根据程序运行的时间和cpu频率来计算在另外的cpu上运行所花的时间
C++ 根据程序运行的时间和cpu频率来计算在另外的cpu上运行所花的时间
43 0
|
5月前
|
安全 编译器 C++
C++一分钟之-编译时计算:constexpr与模板元编程
【6月更文挑战第28天】在C++中,`constexpr`和模板元编程用于编译时计算,提升性能和类型安全。`constexpr`指示编译器在编译时计算函数或对象,而模板元编程通过模板生成类型依赖代码。常见问题包括误解constexpr函数限制和模板递归深度。解决策略包括理解规则、编写清晰代码、测试验证和适度使用。通过实战示例展示了如何使用`constexpr`计算阶乘和模板元编程计算平方。
87 13
|
3月前
|
C++
C++ PCL 计算多个RT矩阵变换后的变换矩阵
C++ PCL 计算多个RT矩阵变换后的变换矩阵
40 0
|
3月前
|
C++
C++代码来计算一个点围绕另一个点旋转45度后的坐标
C++代码来计算一个点围绕另一个点旋转45度后的坐标
71 0
|
4月前
|
机器学习/深度学习 算法 C++
C++多态崩溃问题之为什么在计算梯度下降时需要除以批次大小(batch size)
C++多态崩溃问题之为什么在计算梯度下降时需要除以批次大小(batch size)