【发布时间】:2017-03-18 21:00:31
【问题描述】:
我在 C 中创建了一个函数void N,它读取一个文件和第 4 行,然后每 6 行是一个数字,我需要将其从字符串转换为双精度并将它们放入新数组.. 但是每个新数字我偶然发现重写了数组中所有已经存在的数字
#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;
}
【问题讨论】:
-
什么数组?你的代码很混乱。
-
欢迎来到 Stack Overflow!请查看我们的SO Question Checklist 以帮助您提出一个好问题,从而得到一个好的答案。
-
platy[i] = &val;显然是错误的。platy[i]是指向char数组的指针,但val是double。您还泄漏了您刚刚使用platy[i] = malloc(sizeof(line));分配的内存。 -
先做一些简单的事情。编写将所有数字读入数组的代码。当这有效时,每隔 4 或 6 次就开始做一些花哨的事情
标签: c arrays function while-loop malloc