用C语言在stdout中打印新行的最快方法?

时间:2014-04-10 14:26:39

标签: c io

所以我在codechef(编程竞赛平台)上解决问题,这个特定的问题有很多I / O,每个结果都要在控制台的新行中打印出来。如果没有在新行中打印结果,程序执行大约需要0.3秒,但是新行需要大约1.3秒,1秒是程序执行的限制。

我的问题是,是否可以更快地在控制台上打印新行?

我正在使用putchar_unlocked并使用此自定义函数进行输出,如下所示。编译器是gcc 4.8.1

#define pc(x) putchar_unlocked(x);
inline void writeInt (int n)
{
    int N = n, rev, count = 0;
    rev = N;
    if (N == 0) {
      pc('0'); 
      pc('\n'); 
      return;
    }
    while ((rev % 10) == 0) {
      count++;
      rev /= 10;
      //obtain the count of the number of 0s
    }
    rev = 0;
    while (N != 0) { 
      rev = (rev<<3) + (rev<<1) + N % 10;
      N /= 10;
      //store reverse of N in rev
    }  
    while (rev != 0) {
      pc(rev % 10 + '0'); 
      rev /= 10;
    }
    while (count--) pc('0');
    pc('\n'); //this line prints new line and the reason for 1 second delay!
}

1 个答案:

答案 0 :(得分:7)

默认情况下stdout是行缓冲的。表示如果缓冲区中有换行符,则调用系统调用write

将stdout缓冲更改为完全缓冲:

setvbuf(stdout, NULL, _IOFBF, 0);

并在结尾刷新你的输出:

fflush(stdout);