作为我上学期的项目,我编写了一个简单的C应用程序,该应用程序使用Horner算法计算多项式的函数值。 要求之一是将输出打印到txt文件。我通过一些简单的循环和fprintf函数解决了它。
我的教授希望我对其进行编辑,以通过使用stdarg.h库将输出合并到屏幕和文件中。我大概是个弱智者,因为我已经尝试了三天了,没有任何结果。
我已经阅读了大多数主题相似的主题,试图在其中实现一些tee宏,但是我没有能力使其工作。 请帮助我,否则我将永远不会独自通过这门课。
下面的整个代码
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#define OUT "./out.txt"
double horner(double * koe, int level, double x) {
int i;
for (i = level - 1; i >= 0; --i) {
koe[i] += x * koe[i + 1]; //
}
return koe[0];
} //poly[0]x(n-1) + poly[1]x(n-2) + .. + poly[n-1]
int scanINT() {
int number;
while (1) {
int LoadResult = scanf("%d", & number);
fflush(stdin);
if (LoadResult != 1) {
printf("Value is not number.\n");
} else {
return number;
}
}
return 0;
}
double ScanDouble() {
double number;
while (1) {
int LoadResult = scanf("%lf", & number);
fflush(stdin);
if (LoadResult != 1) {
printf("Value is not double.\n");
} else {
return number;
}
}
return 0;
}
int ScanPositiveNumber() {
while (1) {
int number = scanINT();
if (number < 0) {
printf("Value is negative.\n");
} else {
return number;
}
}
return 0;
}
int main(void) {
int level, i;
double x;
double * koe;
FILE * f = fopen(OUT, "w");
if (f == NULL) {
printf("Couldnt open file out.txt \n");
exit(1);
}
while (1) {
int option;
printf("********************************\n");
printf("Option 1: Functional value calc\n");
printf("Option 2: Save result and end\n");
printf("********************************\n\n");
option = scanINT();
if (option == 1) {
printf("Insert level of polynom: ");
level = ScanPositiveNumber();
koe = (double * ) malloc((level + 1) * sizeof(double));
if (koe == NULL) printf("Memory allocation failed.\n");
for (i = level; i >= 0; --i) {
printf("x^%d: ", i);
koe[i] = ScanDouble();
}
printf("Insert point x: ");
x = ScanDouble();
double hornerVal = horner(koe, level, x);
printf("f(%0.2f) = %0.2f\n", x, hornerVal);
for (i = level; i >= 0; --i) {
if (i != level) {
if (koe[i] < 0) {
fprintf(f, " ");
} else {
fprintf(f, " +");
}
}
fprintf(f, "%0.2fx^%d", koe[i], i);
}
fprintf(f, "\nf(%0.2f) = %0.2f\n", x, hornerVal);
free(koe);
} else if (option == 2) {
break;
}
}
if (fclose(f) != 0) {
printf("Couldnt save file out.txt \n");
}
return 0;
}
**/
答案 0 :(得分:1)
我想你想要这样的东西
#include <stdarg.h>
#include <stdio.h>
#define OUT "./out.txt"
void printtwice(const char *fmt, ...) {
va_list args;
va_start(args, fmt);
vprintf(fmt, args);
va_end(args);
va_start(args, fmt);
FILE *h = fopen(OUT, "a"); // assume it worked
vfprintf(h, fmt, args);
fclose(h);
va_end(args);
}
int main(void) {
printtwice("%d-->%f\n", 42, 2.7182818);
}
查看略有不同的代码running on ideone