同时打印多个整数

时间:2013-04-29 03:07:53

标签: c printf

我想知道是否有更好的方法在c中打印一组int;

目前,我为数组中的每个int执行printf("%d" ,.. )

然而,这导致每个int一个系统调用? (如果我的理解是正确的)。

最好将int数组转换为字符串缓冲区,然后在一次调用中打印缓冲区。

如有必要,我可以为其编写代码。

Q1。这是一个好主意还是太麻烦值得呢?

Q2。是否有任何库实现这样的事情。 (无论我谷歌回到初学者的印刷整数教程:s)

修改 之前不知道数组的大小。

2 个答案:

答案 0 :(得分:4)

不,除非您将int设置为无缓冲模式,否则它不会导致每个stdout进行一次系统调用。这是stdio的全部要点:为您缓冲输出,这样您就不必自己动手了。 printf函数本身有额外的调用开销。如果您发现自己需要更多性能,可以尝试以下方法:

for (i=0; i+4<=N; i+=4)
    printf("%d %d %d %d ", a[i], a[i+1], a[i+2], a[i+3]);
for (; i<N; i++)
    printf("%d ", a[i]);

答案 1 :(得分:3)

使用printf时,输出已经缓冲。只有当您“刷新”缓冲区时才会进行系统调用 - 通过调用fflush(stdout)显式地或通过将\n打印到控制台来显式调用。因此,应用程序端的预缓冲将使您的代码更加复杂,而不会在性能方面产生任何实际差异。

就帮助您将int写入字符串的库而言,您可以使用已经使用的相同<stdio.h>:分配足够大的缓冲区来保存整数,使用sprintf代替printf写入,然后使用整个缓冲区的内容调用printf。如果您决定在输出中将它们用作分隔符,这可以帮助您避免在\n上进行刷新。