簡體   English   中英

如何從C中的文件中保存我在數組中讀取的數據

[英]How to save the data which i read in an array from a file in C

所以在做這個任務的時候我遇到了一個問題,我試圖在一個數組中保存一些值(浮點數),以便我可以在以后生成圖形時使用它們,但我在這里遇到的問題是我讀取的值和我可以打印它們,但后來我檢查了數組,存儲的數字不一樣。

我試圖在avg []中保存。

#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;
}

所以,問題是閱讀年份和相應的值,並形成該特定年份的平均值,然后在圖表中表示。

我可以做第一部分,它需要平均值,但是當我以后嘗試使用它時,它存儲了錯誤的值,你可以看到我試圖打印avg []的所有值,可以任何請幫助我弄清楚如何糾正錯誤,我希望他們被保存為浮動。

分配數據表在這里。 https://www.scribd.com/document/333844245/TG-STAID000179

我嘗試讀取值並使用atoi來保存它們,然后使用它們來獲得平均值,我使用Count> 21因為它們之前的文本不是必需的,當它在第34列讀取'9'時它會忽略,因為它不是有效數據(在數據表中)

  1. 用於計算計算年溫度平均值的變量l在處理年變化的塊中被定義和初始化,因此總是重置為零。 通過將行定義移到行讀取循環之外來校正這一點,甚至可能在全局范圍內(參見2.)。
  2. maximum()minimum()函數對array元素0到99進行操作,而不管傳遞的參數是否定義為avg[82]並且末尾的某些元素未初始化。 通過使用存儲元素的實際數量l來糾正此問題,可以是全局范圍變量或附加函數參數。
  3. singleline緩沖區太短,因此溢出。
  4. while(!feof(sample))循環在讀取最后一行后再循環一次,因為在下一個fgets()之前無法識別EOF。 通過使用fgets()的返回值來測試EOF來糾正此問題。
  5. 即使cnt為零,也評估avg[l] = 0.1 * sum / cnt 通過將此表達式移動到if (cnt != 0) { … }塊(也是l++ ,但在printf()后面來糾正此問題。
  6. 如果cnt為零,則不執行cnt = 1 這會導致第一個數據點無法計數。 通過將此表達式移到if (cnt != 0) { … }塊后面來糾正此問題。
  7. 額外的循環周期(參見4.)可能導致在最終的printf("Fuer %i - %i Werte - Durchschnitt %.2f °C\\n", oldyear, cnt-1, last);使用cnt-1 printf("Fuer %i - %i Werte - Durchschnitt %.2f °C\\n", oldyear, cnt-1, last); ,但正確的只是cnt
  8. for(int i=0;i<125;i++)的循環也應該使用存儲元素的實際數量l ,而不是125
  9. 需要注意的是,最終年份的平均值(可能是有意的)沒有存儲在avg[]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM