我被要求为大学任务实现两个通用动态集,作为功能集的一部分,我设计了一个相当粗略的基准,让我粗略地了解算法的执行效率。除了在控制台中显示基准测试结果外,我还想将结果保存到磁盘。到目前为止,我一直在使用printf
并随后调用fprintf
将相同的格式字符串保存到磁盘。
printf("Average time: %2.8f seconds || Total: %2.8f seconds\n", totalTime/50, totalTime);
fprintf(fp, "Average time: %2.8f seconds || Total: %2.8f seconds\n", totalTime/50, totalTime);
是否有可能在C中一次性完成所有操作?即将输出同时放在两个流上?我很感激任何提示。我的代码必须符合gnu90标准。
提前致谢!
答案 0 :(得分:0)
printf(...)
相当于fprintf(stdout,...)
,其中stdout
是FILE
指针。
这意味着您的程序基本上将数据写入两个不同的文件,因此需要执行两个单独的文件写入操作。
简而言之,答案是 - 不,你不能“一次性完成所有这一切”。
答案 1 :(得分:0)
没有内置功能完全符合您的要求;所以考虑写一个。 printf的一个有趣的方面是它是一个可变函数;幸运的是,printf系列旨在简化这类工作。类似的东西:
#include <stdio.h>
#include <stdarg.h>
int stdout_fprintf(FILE * restrict stream, const char * restrict format, ...) {
va_list ap;
va_start(ap, format);
vprintf(format, ap);
int result = vfprintf(stream, format, ap);
va_end(ap);
return result;
}
答案 2 :(得分:0)
我看了source code of a tee implementation。那里使用的方法是:
在您的情况下,创建包装函数更容易。这是一个例子:
#include <stdio.h>
#include <stdarg.h>
int bothprintf(FILE *stream, const char *format, ...) {
va_list args;
int ret;
va_start(args, format);
vfprintf(stream, format, args);
va_end(args);
va_start(args, format);
ret = vprintf(format, args);
va_end(args);
return ret;
}
* v * printf系列与通常的printf相同,不同之处在于它以va_list的形式使用其参数,使其易于用于这类事情。
显然,您无法以简单的方式保留两个返回值。此示例使用(v)printf。
的返回值