讨教大家一个C语言问题 这是一个txt 内容:
0.992 1.029 1.074 1.120 1.008 1.018 0.974 0.980 0.982 0.957 0.862 0.975 1.049 1.047 1.038 0.959 1.011 1.017 1.007 0.963
本人用fscanf方法读取成double类型的数组 并且在读取的函数中打印了一次 在函数中打印出来是正常的 但是一旦读取成功 数组的第一个值就变了 从0.992变成了0.4 为什么会出现这种情况呢?
在函数中打印出来是这样的:0.992 1.029 1.074 1.120……
读取完成后,打印出来是这样:0.400 1.029 1.074 1.120……
第一个数变化了。
这是读取的方法:
0.992 1.029 1.074 1.120 1.008 1.018 0.974 0.980 0.982 0.957 0.862 0.975 1.049 1.047 1.038 0.959 1.011 1.017 1.007 0.963
本人用fscanf方法读取成double类型的数组 并且在读取的函数中打印了一次 在函数中打印出来是正常的 但是一旦读取成功 数组的第一个值就变了 从0.992变成了0.4 为什么会出现这种情况呢?
在函数中打印出来是这样的:0.992 1.029 1.074 1.120……
读取完成后,打印出来是这样:0.400 1.029 1.074 1.120……
第一个数变化了。
这是读取的方法:
int readENSEMBLEtxt_to_doublearray(double a[]) { //double v[20];//开一个足够大的数组。 int i = 0,j; FILE *fpensem;//文件指针 fpensem = fopen(BGC_PATH, "r");//以文本方式打开文件。 if(fpensem == NULL) //打开文件出错。 return -1; //while(fscanf(fpensem, " %lf", &a[i]) != EOF) //读取数据到数组,直到文件结尾(返回EOF) // i++; //fclose(fpensem);//关闭文件 while(!feof(fpensem)) { fscanf(fpensem,"%lf",&a[i]); ++i; } fclose(fpensem);//关闭文件 for(j = 0; j < i; j ++)//循环输出数组元素。 { printf("%lf ", a[j]); } printf("\r\n"); return 0; }
下面是相关的调用过程:
double ensemble[20]={0};
readENSEMBLEtxt_to_doublearray(ensemble);
假如,本人把这个函数和调用过程,从本人原来的程序中,抽出来,结果是对的。但是在本人的程序中,一模一样的内容,出来后第一个数字变化了,这里是在Visual Studio里面。BGC_PATH,是本人定义的一个宏:#define BGC_PATH “F:\Biome-BGC\biomebgc-4.2\biomebgc-4.2\generateEnsemble.txt”。原来的程序是个比较大的生态模型。
解决方案
40
读取前用fseek函数置头看看
40
单步跟踪程序运行,观察分析变量变化情况,在哪发生了变化,然后分析原因