今天同样遇到了printf()不输出的情况,看来水很深,在网上找了找,将下面这些东西推荐给大家,
源连接:http://blog.163.com/coder_jack@126/blog/static/341526842010497315061/
以下程序只是为了在终端上不断连续输出->而已,但是在没有加fflush之前发现根本无法向屏幕打印任何内容。为什么以前从来没有发现printf的这种特性呢?后来想到,以前在用printf时多收情况下都会在字符串尾部加一个\n。或者没有加\n,但是你的程序不是一个dead loop,便也不会牵扯到问题,因为就算执行printf后只是将内容送到缓冲区,但是你到程序结束里,程序结束便会导致缓冲区刷新,你便看到你到屏幕上有你期望到东西出现了。所以我最后得到一个这样到结论:printf会把东西送到缓冲区,而如果缓冲区不刷新到话,你便不会在屏幕上看到东西,而能导致缓冲区刷新到情况有这些:1 强制刷新 fflush;2,放到缓冲区到内容中包含\n \r ;3,缓冲区已满;4,需要从缓冲区拿东西到时候,如执行scanf;
但是这些问题在vc中都没有出现,所以这时编译器相关的!
#include <stdio.h>
#include <unistd.h> //for sleep()
int main(void)
{
printf("\nstart the dead loop\n");
while(1)
{
printf("\b->");
fflush(stdout);//刷新输出缓冲区,如果不做这个动作,上边的输出便不会显示到屏幕上,除非其中有换行操作或者缓冲区,这也许就是所谓到终端行规程吧。
usleep(100000);
}
return 1;
}
分享到:
相关推荐
C-printf 项目要求 所有文件将在Ubuntu 14.04 LTS上编译 程序和函数将使用gcc 4.8.4使用标志-Wall -Werror -Wextra和-pedantic进行编译 代码必须遵循风格 ... 使用1024个字符的本地缓冲区,以便尽可能少地调用wr
第一部分(讨论“缓冲区溢出和注入”问题)(更新时间:2008-2-13) 第二部分(讨论进程的内存分布情况)(更新时间:2008-6-1) 《进程和进程的基本操作》 进程操作:描述进程相关概念和基本操作 更新时间:2008-2...
该库是完全类型安全的,自动内存管理可防止缓冲区溢出,使用异常或在编译时报告格式字符串中的错误。 该库生成紧凑的每次调用编译代码。 该库是高度可移植的,仅依赖于一小组 C++11 特性,如可变参数模板、类型特征...
该库是完全类型安全的,自动内存管理可防止缓冲区溢出,使用异常或在编译时报告格式字符串中的错误。 该库生成紧凑的每次调用编译代码。 该库具有高度的可移植性,仅依赖一小部分C ++ 11功能,例如可变参数模板,...
printf("You typed \"%s\"\n", answer); o 8.2 我的 strcat() 不行.我试了 char *s1 = "Hello, "; char *s2 = "world!"; char *s3 = strcat(s1, s2); 但是我得到了奇怪的结果。 o 8.3 但是 strcat 的手册页说它...
3.8 为什么表达式printf("%d %d", f1(), f2()); 先调用了f2?我觉得逗号表达式应该确保从左到右的求值顺序。 36 3.9 怎样才能理解复杂表达式并避免写出未定义的表达式?“序列点”是什么? 36 3.10 在a[i] = i...
第1章 声明和初始化 基本类型 1.1 我该如何决定使用哪种整数类型? 1.2 为什么不精确定义标准类型的大小? 1.3 因为C语言没有精确定义类型的大小,所以我一般都用typedef定义int16和...printf("Typesomething...
中断驱动的USART(RS232)库,用于AVR微控制器,支持多个硬件UART,使用环形缓冲区进行接收/发送。 专为资源有限的实时或高吞吐量应用而设计。 特征 最多支持4个USART的可选支持 多达255个字节的FIFO 除每个已实现...
printf("%dnn", i++ * i++); 返回49?不管按什么顺序计算, 难道不该打印出56吗? . . . . . . 13 3.3 对于代码int i = 3; i = i++; 不同编译器给出不同的结果, 有的为 3, 有的为4, 哪个是正确的? . . . . . . . . ...