double数组的第一个值调用函数中和调用函数后不一样

C语言 码拜 9年前 (2016-04-12) 930次浏览
讨教大家一个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……
第一个数变化了。
这是读取的方法:

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

单步跟踪程序运行,观察分析变量变化情况,在哪发生了变化,然后分析原因

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明double数组的第一个值调用函数中和调用函数后不一样
喜欢 (0)
[1034331897@qq.com]
分享 (0)