のような多数のファイルがあり、-7.47004e-16
を使用してフロート配列に読み込もうとしています。
fscanf(rhs, "%f", &numbers[i]);"
これはwhileループにあります。ただし、上記のような番号がある場合は機能しません。
数が多いのでうまくいきませんか?または、これは数値形式の「e」の機能しない原因ですか?
これを適切に行うためのいくつかの方法をお勧めしますか?
ありがとう。
注:Numbersはfloat配列であり、rhsはファイル名です。ファイルには1行に1つの番号があり、一部の番号は上記と同じ形式であり、一部の番号は、などのはるかに小さいもの-1.88493
です。
コードは次のとおりです。
int main( int argc, char *argv[])
{
FILE *rhs, *output;
int niter, n, n1;
// counters
int i = 0, j = 0, k, m, p;
rhs = fopen(argv[1], "r");
// ab+ opens file for writting and creates the file if need be
output = fopen(argv[2], "ab+");
niter = atoi(argv[3]);
// check if files open up or not, if not exit.
if((rhs == NULL) || (output == NULL))
{
printf("Error Opening files.\n");
exit(1);
}
// read in N
fscanf(rhs, "%d", &n);
// initialize n1
n1 = n + 1;
// generate array to hold values from rhs file
long double *numbers = (long double *)malloc(sizeof(long double) * ((n1)*(n1)));
long double *y = (long double *)malloc(sizeof(long double) * ((n1)*(n1)));
long double *f = (long double *)malloc(sizeof(long double) * ((n1)*(n1)));
long double *yp = (long double *)malloc(sizeof(long double) * ((n1)*(n1)));
// get numbers and store into array
for(i = 0; i <= n; i++)
{
for(j = 0; j <= n; j++)
{
fscanf(rhs, "%Lf", &numbers[i]);
printf("i = %d, number = %Lf\n", i, numbers[i]);
}
}
for(k = 0; k < niter; k++)
{
smooth(n, y, yp, f);
}
fclose(rhs);
free(numbers);
free(y);
free(f);
free(yp);
return 0;
}