首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

printf 函数为啥没有输出?

2013-01-08 
printf 函数为什么没有输出???#include stdio.h#include stdlib.h#include sys/time.h#include sig

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

#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <signal.h>
#include <unistd.h>

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. 程序结束时。

热点排行