如何在C中保存从文件中读取的数组数据

如何在C中保存从文件中读取的数组数据,c,arrays,save,C,Arrays,Save,所以在做这个任务时,我遇到了一个问题,我试图在数组中保存一些值集(float),以便以后生成图形时使用它们,但我在这里面临的问题是,我读取值并打印它们,但后来我检查了数组,存储在数组中的数字不一样 我正在尝试以平均值[]保存 #include<stdio.h> #include<stdlib.h> #include<string.h> float maximum(float array[]) { float max=0; for(int i=0;i<

所以在做这个任务时,我遇到了一个问题,我试图在数组中保存一些值集(float),以便以后生成图形时使用它们,但我在这里面临的问题是,我读取值并打印它们,但后来我检查了数组,存储在数组中的数字不一样

我正在尝试以平均值[]保存

#include<stdio.h>
#include<stdlib.h>
#include<string.h>


float maximum(float array[])
{
float max=0;
for(int i=0;i<100;i++)
{
    if (array[i]>max)
        max=array[i];
}
return max;
}

float minimum(float array[])
{
float min=0;
for(int i=0;i<100;i++)
{
    if (array[i]<min)
        min=array[i];
}
return min;
}





char * read(char *filename)    
 {
FILE * sample;
sample = fopen(filename,"r");  //like file open in notepad  ,which file? and    what to do?
int count = 0;
static char singleline[100];  
int cnt = 0;
int sum = 0;
int oldyear = -1;
float avg[82];

while(!feof(sample))    //read that until end.
{
    count++;            
    fgets(singleline,150,sample);

    if (count>21 && singleline[33]!='9') 

    {               
        char y[5], t[6];
        for (int i = 14; i < 18; i++)
        {
            y[i - 14] = singleline[i];
        }
        y[4]='\0';
        for (int i= 24;i <29;i++)
        {
            t[i-24]=singleline[i];
        }

        t[5]='\0';
        int year = atoi(y);
        int temp = atoi(t);
        //printf("year : %i ,temp: %i\n",year, temp);

        if (year == oldyear)
        {
            cnt++;
            sum += temp;
        }
        else 
        {   
            int l=0;
            l++;
            avg[l] = 0.1 * sum / cnt;
            if (cnt != 0) 
            {       
                printf("Fuer %i - %i Werte - Durchschnitt %.2f °C\n", oldyear, cnt, avg[l]);
                cnt = 1;
                sum = temp;
                //save[l]=avg;
            }
            oldyear = year;     
        }

    }

}               
            float last = 0.1 * sum / cnt;
            printf("Fuer %i - %i Werte - Durchschnitt %.2f °C\n", oldyear, cnt-1, last);
            fclose(sample);
            //for(int i=0;i<)


for(int i=0;i<125;i++)
{
 printf("%f\n",avg[i]);
}       
printf("\nMax Temp= %f",maximum(avg));
printf("\nMax Temp= %f",minimum(avg));
return singleline;

 }


 int main()
 {  

char * file1 = "TG_STAID000476.txt";
read(file1);

//char * file2 = "TG_STAID000179.txt";
//read(file2);


return 0;
}
#包括
#包括
#包括
浮点最大值(浮点数组[])
{
浮动最大值=0;
对于(int i=0;imax)
max=数组[i];
}
返回最大值;
}
最小浮点(浮点数组[])
{
浮动最小值=0;
对于(int i=0;i
  • 用于计算年平均温度的变量
    l
    ,在处理年变化的块中定义和初始化,因此总是重置为零。通过将定义移到行读取循环之外,甚至在全局范围内(参见2.)来纠正这一点
  • maximum()
    minimum()
    函数在
    array
    元素0到99上运行,而不管传递的参数定义为
    avg[82]
    和结尾的某些元素未初始化。请使用存储元素的实际数量
    l
    作为全局范围变量或附加函数参数来更正此问题
  • 单行
    缓冲区太短,因此溢出
  • while(!feof(sample))
    循环在读取最后一行后额外循环一次,因为在下一行
    fgets()
    之前无法识别EOF。请使用
    fgets()
    的返回值测试EOF来纠正此问题
  • 即使
    cnt
    为零,也会计算
    avg[l]=0.1*sum/cnt
    。通过将此表达式移动到
    if(cnt!=0){…}
    块内,也移动到
    l++
    ,但移动到
    printf()
    后面来纠正此问题
  • 如果
    cnt
    为零,则不会执行
    cnt=1
    。这会导致不计算第一个数据点。请将此表达式移到
    if(cnt!=0){…}
    块后面,以纠正此问题
  • 额外循环(参见4.)可能导致在最终的
    printf中使用
    cnt-1
    (“Fuer%i-%i Werte-durchchnitt%.2f°C\n”,oldyear,cnt-1,last);
    ,但正确的是
    cnt
  • (int i=0;i)的循环
    
    
  • 用于计算年平均温度的变量
    l
    ,在处理年变化的块中定义和初始化,因此总是重置为零。通过将定义移到行读取循环之外,甚至在全局范围内(参见2.)来纠正这一点
  • maximum()
    minimum()
    函数在
    array
    元素0到99上运行,而不管传递的参数定义为
    avg[82]
    和结尾的某些元素未初始化。请使用存储元素的实际数量
    l
    作为全局范围变量或附加函数参数来更正此问题
  • 单行
    缓冲区太短,因此溢出
  • while(!feof(sample))
    循环在读取最后一行后额外循环一次,因为在下一行
    fgets()
    之前无法识别EOF。请使用
    fgets()
    的返回值测试EOF来纠正此问题
  • 即使
    cnt
    为零,也会计算
    avg[l]=0.1*sum/cnt
    。通过将此表达式移动到
    if(cnt!=0){…}
    块内,也移动到
    l++
    ,但移动到
    printf()
    后面来纠正此问题
  • 如果
    cnt
    为零,则不会执行
    cnt=1
    。这会导致不计算第一个数据点。请将此表达式移到
    if(cnt!=0){…}
    块后面,以纠正此问题
  • 额外循环(参见4.)可能导致在最终的
    printf中使用
    cnt-1
    (“Fuer%i-%i Werte-durchchnitt%.2f°C\n”,oldyear,cnt-1,last);
    ,但正确的是
    cnt

  • 的循环
    (int i=0;ii如果结果是在平均值上,为什么返回单线?实际上,这个函数不会返回任何我认为的结果,起初当我使用该方法读取完整的线并打印它时,我使用了返回单线,但后来我意识到我不需要它,我实际上找出了错误所在,我在它所在的循环中指定了l=0重置值:D,但现在我不知道如何将其余数组值保留为null。您需要检查
    fgets()
    中的返回值,以确定在使用它读取的“行”之前是否遇到EOF。欢迎使用堆栈溢出。请尽快阅读和页面。更紧急的是,请生成MCVE()。没有明确的证据表明数据在打印前后的位置以及值的变化。请包含再现问题的最小数据集。显示正确的输出。如果“不同”所有这些都很重要,那么它可能足以两次显示您应该获得的内容。问题的一个可能原因是在数组超出范围后尝试访问数组。不过,我不确定您将值存储在哪里。
    fgets(singleline,150,sample);
    -->
    fgets(singleline,100,sample)
    如果结果是在avg上,为什么要返回单线?事实上,这个函数不会返回我认为的任何东西,起初当我使用这个方法读取完整的行并打印它时,我使用了那个返回单线,但后来我意识到我不需要它,并且我实际上找到了错误所在,我在循环中指定了l=0设置值:D,但现在我不知道如何将其余数组值保留为null。您需要检查
    fgets()
    中的返回值,以确定在使用它读取的“行”之前是否遇到EOF。欢迎使用堆栈溢出。请尽快阅读和页面。Mor