如何在C中保存从文件中读取的数组数据
所以在做这个任务时,我遇到了一个问题,我试图在数组中保存一些值集(float),以便以后生成图形时使用它们,但我在这里面临的问题是,我读取值并打印它们,但后来我检查了数组,存储在数组中的数字不一样 我正在尝试以平均值[]保存如何在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<
#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