Как мой проект проекта в школу, я написал простое приложение на C, которое вычисляет функциональное значение полинома, используя алгоритм Хорнера.Одним из запросов было распечатать вывод в текстовый файл.Я решил это с помощью некоторых простых функций цикла и fprintf.
Мой профессор хочет, чтобы я отредактировал его, чтобы объединить вывод на экран и в файл с помощью библиотеки stdarg.h.Я, вероятно, немного отсталый, потому что я пытался сделать это в течение трех дней безрезультатно.
Я прочитал большинство тем с похожей темой, пытался внедрить в него некоторые виды макросов, но я не был способен заставить его работать.Пожалуйста, помогите мне кто-нибудь, или я никогда не буду проходить этот класс самостоятельно.
Весь код ниже
#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;
}
**/