【问题标题】:'While' keeps rewriting array'While' 不断重写数组
【发布时间】: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] = &amp;val; 显然是错误的。 platy[i] 是指向 char 数组的指针,但 valdouble。您还泄漏了您刚刚使用 platy[i] = malloc(sizeof(line)); 分配的内存。
  • 先做一些简单的事情。编写将所有数字读入数组的代码。当这有效时,每隔 4 或 6 次就开始做一些花哨的事情

标签: c arrays function while-loop malloc


【解决方案1】:

这段代码完全错误

  double *platy[1800];

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

你声明了一个指向双精度的指针数组。然后设置一个数组元素明确指向某事物 mallocd 进行一行输入。

我怀疑你想要的是什么

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

【讨论】:

    猜你喜欢
    • 2011-11-23
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 2021-11-13
    • 2014-03-31
    • 2013-06-04
    相关资源
    最近更新 更多