使用C

时间:2015-04-29 22:05:21

标签: c

嘿,这让我感到沮丧,我不知道为什么它不起作用。截至目前,我只想制作一个基本的2乘2矩阵。 in_file将是

   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看起来像那样任何输入请告诉我。

1 个答案:

答案 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]);

如果看起来令人困惑,请不要气馁!