所以我在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!
}
答案 0 :(得分:7)
默认情况下stdout
是行缓冲的。表示如果缓冲区中有换行符,则调用系统调用write
。
将stdout缓冲更改为完全缓冲:
setvbuf(stdout, NULL, _IOFBF, 0);
并在结尾刷新你的输出:
fflush(stdout);