2016-11-04 2 views
-1

나는 파일을 읽는 C에서 void N 함수를 만들고 4 번째 줄마다 6 번째 줄마다 문자열에서 double로 변환하여 새로운 배열에 넣어야하는 숫자입니다. 그러나 모든 새 번호가 내가 배열에 이미 존재하는 숫자 모두 재 작성 우연히'While'은 배열을 다시 작성합니다.

#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

스택 오버플로에 오신 것을 환영합니다! 좋은 질문을하고 좋은 대답을 얻으려면 [SO Question Checklist] (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); 
관련 문제