2.000000000 3.00000000
6.000000000 5.00000000
所以代码如下
#include <stdlib.h>
#include <stdio.h>
#define ELEMENTS 1
#define n 1
double Angstroms[ELEMENTS];
double Energy[ELEMENTS];
double ax[ELEMENTS][n];
void file_input ();
void polynomial ();
// void conversion ();
int main () {
file_input ();
polynomial ();
// conversion ();
return 0;
}
void file_input () {
float a, b;
int i;
FILE * in_file = fopen("H2Mini.txt", "r");
for (i = 0; i <= ELEMENTS; i++) {
fscanf(in_file, "%f %f\n", &a, &b);
Angstroms[i] = a;
Energy [i] = b;
}
fclose(in_file);
}
void polynomial () {
int i;
FILE * outfile = fopen("PolyTest1.txt", "w");
if (outfile == NULL) {
printf ("Error file does not exist");
exit (-1);
}
for (i = 0; i <=ELEMENTS; i++) {
ax[i][0] = 1;
// printf ("\n");
ax[i][1] = Angstroms[i];
fprintf (outfile, "%.8f %.8f\n", ax[i][0], ax[i][1]);
}
}
outfile正在制作
[1.00000000 2.00000000
1.00000000 1.00000000]
我希望outfile看起来像这样
[1.00000000 1.00000000
2.00000000 6.00000000]
我真的不明白为什么outfile看起来像那样任何输入请告诉我。
答案 0 :(得分:4)
此代码
#define ELEMENTS 1
....
double Angstroms[ELEMENTS];
double Energy[ELEMENTS];
制作两个数组,每个数组包含一个元素(因此最大索引为0)。当您尝试访问Angstroms索引1处的元素时,您将进入未定义的行为。你碰巧偶然发现了它没有发生过段错误的情况。
编辑:请参阅,例如this question.看起来你犯了一个类似的错误定义n,我认为也应该是2。
此外,当程序正常运行时,我不认为你会得到你想要的输出,我想你会得到
1.00000000 2.00000000
1.00000000 6.00000000
您每次将ax [i] [0]设置为1,然后将其打印为每行的第一个数字,然后打印Angstroms [i],这是第i个输入行上的第一个数字。至少如果我正确理解这段代码:
ax[i][0] = 1;
ax[i][1] = Angstroms[i];
fprintf (outfile, "%.8f %.8f\n", ax[i][0], ax[i][1]);
如果看起来令人困惑,请不要气馁!