2016-11-04 49 views
-1

我在C中創建一個函數void N讀取一個文件和第四個然後每第六行是一個數字,我需要從字符串轉換爲雙倍,並將它們放到新的數組.. ..但每一個新的號碼,我在陣列上重寫絆倒所有已經存在的數字'雖然'一直重寫數組

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

void V(int *id,int i,int *praca, double *plat,int *datum, FILE **f) 
{ 
    char meno[2000],priezvisko[2000]; 

    if ((*f = fopen("zam.txt", "r")) == NULL) 
     { 
      printf("Neda sa otvorit"); 
      // koniec programu 
      return ;   
     } 

    while(//vypis informacii zamestnancov 
      fscanf(*f,"%d %s %s %d %lf %d",&id[i],&meno[i],&priezvisko[i],&praca[i],&plat[i],&datum[i])>0) 
     { 
      printf(" osobne cislo zamestnanca:%d\n meno priezvisko:%s %s\n administrativa/vyrobny pracovnik:%d\n plat:%g\n datum:%08d\n\n",id[i],&meno[i],&priezvisko[i],praca[i],plat[i],datum[i]); 
      i++; 
     } 
} 

void N(int i,double plat[], FILE *f) 
{ 
    rewind(f); 

    int j=0,k=0; 
    double *platy[1800]; 
    char line[1800]; 
    int suma = 0; 
    int count = 0; 
    int lineNumber = 3; 
    double val; 
    double d; 

    while(fgets(line, sizeof(line), f)!= NULL) 
     { 

      if (count == lineNumber) 
       { 
        suma++; //pocet platov 
        count++; 
        lineNumber+=6; 
        platy[i]=malloc(sizeof(line)); 
        printf("i : %d\n",i); 
        //printf("%s",line); 
        val = atof(line); 
        //printf("%g\n",val); 
        platy[i] = &val; 
        val = *platy[i]; 
        d = *platy[0]; 
        printf("array: %g\n",val); 
        printf("array 0: %g\n",d); 

        i++; 

       } 
      else 
       { 
        count++; 
       } 

      printf("%d. %d\n",count,suma); 

     } 
    for (j=0 ; j<suma; j++) { 
     val = *platy[j]; 
     printf("%g\n",val); 
    } 
} 

int main()          //MAIN 
{ 
    int i=0,id[1800],praca[1800],datum[1800];   //deklaracie 
    char *meno[1800],*priezvisko[1800],z; 
    double plat[1800]; 

    FILE *f; 

    while((z = getchar())!='K') 
     { 
      if(z == 'V') 
       V(id,i,praca,plat,datum,&f); 
      if(z == 'P') 
       P(i,praca,plat,datum,f); 
      if(z == 'N') 
       N(i,plat,f); 
     } 
    return 0; 
} 

this the output

the .txt i use

+0

什麼陣列?你的代碼非常混亂。 – cpatricio

+1

歡迎來到Stack Overflow!請查看我們的[SO問題清單](http://meta.stackoverflow.com/questions/260648/stack-overflow-question-checklist)來幫助你提出一個好問題,從而得到一個很好的答案。 –

+0

'platy [i] = &val;'顯然是錯誤的。 'platy [i]'是一個指向'char'數組的指針,但'val'是一個'double'。你也正在泄漏你用'platy [i] = malloc(sizeof(line));'分配的內存。 – Barmar

回答

0

這段代碼是完全錯誤的

double *platy[1800]; 

platy[i]=malloc(sizeof(line)); 

聲明指針數組雙打。然後設置一個數組元素來指向某個輸入行清晰的malloc d。

我懷疑你想要的是

double platy[1800]; 
... 
platy[i] = atof(line);