我正在掃描文件中的雙精度數組。 我可以打印此數組以檢索文件中每一行的正確值。C:掃描的雙數組值改變了原因?
我在此過程中嘗試在另一個文件中掃描另一個數組時出現問題。
我:
//
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main (int argc, char **argv) {
double c[13], d[13];
char filename[20];
double x1, x2, y1, y2, z1, z2, d1, d2, au, aux, auy;
double dx, dy, dz, nnid, chk, nn;
int n, b;
char *in;
in=argv[1];
FILE* infile;
FILE* inbfile;
infile = fopen(in, "r");
inbfile = fopen("copy.bt", "r");
while (!feof(infile)) {
fscanf(infile, "%f %f %e %e %e %e %e %e %e %e %e %e %e %f",c,c+1,c+2,c+3,c+4,c+5,c+6,c+7,c+8,c+9,c+10,c+11,c+12,c+13);
printf("Selected Particle A: %f\n",c[0]);
n=0;
while (!feof(infile)) {
printf("%f\n",c[0]);
fscanf(infile, "%f %f %e %e %e %e %e %e %e %e %e %e %e %f",d,d+1,d+2,d+3,d+4,d+5,d+6,d+7,d+8,d+9,d+10,d+11,d+12,d+13);
printf("%f\n",c[0]);
printf("Selected Particle B: %f\n",d[0]);
/**/
printf("%f = %f ?\n",c[0],d[0]);
if (c[0]==d[0]) {
printf("Same Particle SKIP...\n");
}
else {
dx = (d[4])-(c[4]);
dy = (d[5])-(c[5]);
dz = (d[6])-(c[6]);
printf("dx dy dz %e %e %e\n",d[4],d[5],d[6]);
/**/
if (n == 0) {
au=pow(((dx*dx*dx)+(dy*dy*dy)+(dz*dz*dz)),(1.0/3.0));
printf("%f is %e from %f\n",c[0],au,d[0]);
}
else {
aux=pow(((dx*dx)+(dy*dy)+(dz*dz)),(1.0/3.0));
printf("%f is %e from %f\n",c[0],aux,d[0]);
if (aux < au) {
au = aux;
nnid = d[0];
}
}
/**/
}
n++;
nn=d[1];
/**/
}
printf("%f Is Particle %f At %e\n", c[1], nnid, au);
}
fclose(infile);
fclose(inbfile);
return 0;
}
那麼,爲什麼值的變化?我所做的只是將另一個文件的第一行掃描到一個單獨的數組中。
您需要更精確地顯示您的代碼。我們無法從那個僞代碼中看到你在做什麼。你應該瞄準一個SSCCE(一個[Short,Self-Contained,Complete Example](http://sscce.org/)),以便我們看到你在做什麼,從而給你帶來意想不到的(對你)行爲。在這種情況下,魔鬼將在變量聲明和'fscanf()'參數列表的細節中。 –
加上你似乎正在使用[feof()](http://stackoverflow.com/questions/4299296/how-to-use-feoffile-f)以一種錯誤的方式。 – axiom
您似乎也在以錯誤的方式使用代碼註釋。 – gspr