c语言程序为啥没输出,printf 函数为啥没有输出?

c语言程序为啥没输出,printf 函数为啥没有输出?

printf 函数为什么没有输出???

#include

#include

#include

#include

#include

void handler_sigtime(int signu)

{

switch(signu)

{

case SIGALRM:

printf("receive signal SIGALRM\n");

break;

case SIGPROF:

printf("receive signal SIGPROF\n");

break;

default:

printf("the signu is :%d",signu);

break;

}

}

int main(void)

{

printf("------Main Starting----");

struct itimerval value;

signal(SIGALRM,handler_sigtime); //安装信号处理函数

signal(SIGPROF,handler_sigtime);

value.it_value.tv_sec=1;

value.it_value.tv_usec=0;

value.it_interval.tv_sec=3;

value.it_interval.tv_usec=0;

// setitimer(ITIMER_REAL,&value,NULL); //为了便于查看,我把这两行定时器注释掉了

// setitimer(ITIMER_PROF,&value,NULL);

while(1);

return 0;

}

我在测试的时候,为什么程序已经走到了while循环,“Main starting”却并没有输出呢???难道是定时器和信号处理函数把printf阻塞了吗???谁能详细解释一下

------解决方案--------------------

printf("------Main Starting----\n");

------解决方案--------------------

printf的内容放在缓冲区里面还没有刷出来

原则上是缓冲区满了以后才输出,成为标准输出流,不过你可以在printf后面加一个fflush(stdout);这样就能立即输出来了

------解决方案--------------------

引用:引用:printf的内容放在缓冲区里面还没有刷出来

原则上是缓冲区满了以后才输出,成为标准输出流,不过你可以在printf后面加一个fflush(stdout);这样就能立即输出来了嗯嗯,我加上fflush(stdout);后,就显示出来了。那为什么用while循环一直存在缓冲区呢?

引用:引用:printf的内容放在缓冲区里面还没有刷出来

原则上是缓冲区满了以后才输出,成为标准输出流,不过你可以在printf后面加一个fflush(stdout);这样就能立即输出来了嗯嗯,我加上fflush(stdout);后,就显示出来了。那为什么用while循环一直存在缓冲区呢?

你的printf将输出放到缓冲去以后,缓冲区没有满,之后一直在那死循环,什么已没有做,缓冲区的内容不变,当然不会出来了,如果说程序能从while里跳出来,正常退出的话,也是可以输出来的。或者是你在while里面还有其他的输出内容,让缓冲区变满的话也可以输出来。在后面加fflush和换行符都是将缓冲区里面的东西强制输出到标准流了

------解决方案--------------------

用printf()输出时是先输出到缓冲区,然后再从缓冲区送到屏幕上。

1. 使用fflush(stdout)强制刷新。

2.缓冲区已满。

3.scanf()要在缓冲区里取数据时会先将缓冲区刷新。

4.\n,\r进入缓冲区时。

5.线程结束的时候,如果该线程里也有printf(....);

6. 程序结束时。

相关文章

魔兽世界8.0锚草哪里多?采集点及路线汇总分享
365bet网上手机投注

魔兽世界8.0锚草哪里多?采集点及路线汇总分享

⌛ 06-27 👁️‍🗨️ 5838
男生撒娇句子
365在线体育

男生撒娇句子

⌛ 06-27 👁️‍🗨️ 1972
王者荣耀妲己蛇年限定皮肤怎么买价格最低 妲己愿照众生和蛇年皮肤价格一览
博雅宜宾棋牌正式版
365bet网上手机投注

博雅宜宾棋牌正式版

⌛ 06-28 👁️‍🗨️ 176
平安京:地理位置,京都簡介,歷史介紹,名稱由來,平安京布局,文化發展,政權更替,
ppt中的超链接怎么删除(ppt中超链接怎么取消)
bte365正规网站

ppt中的超链接怎么删除(ppt中超链接怎么取消)

⌛ 06-28 👁️‍🗨️ 6891