Avatar billede mollmannj Nybegynder
23. oktober 2002 - 16:14 Der er 5 kommentarer og
1 løsning

Læse fra fil til et struct aray

Hvordan læser man fra en tekst fil, og putter teksten ind i et struct array.
F.eks hvis man har et struct aray, hvor hver plads har to variabler:
"pris", og "længde", og man har en fil der indeholder:
200kr
10m
250kr
20m
osv.
hvordan for man den information læst rigtigt ind i aray'et?
Avatar billede smokes Nybegynder
23. oktober 2002 - 16:21 #1
fscanf() ville nok være den nemmeste funktion at bruge.. kan ikke huske syntaksen.. slå den op i din compilers help funktion.. går udfra du ved hvordan man åbner filer etc?.. men der er da også andre og mere besværlige måder at gøre det på
Avatar billede soreno Praktikant
23. oktober 2002 - 16:22 #2
#include <stdio.h>

struct Prisliste
{
      char pris[256];
      char type[256];
};

int main(int argc, char **argv)
{
  Prisliste prisliste[100]; //array med plads til 100 Prisliste elementer
  int index = 0;
  FILE *fil;
  fil = fopen("input.txt", "rt");

  if(!fil)
    return -1;

  while(!feof(fil))
  {
      fgets(prisliste[index].pris, 256, fil); //256 er "max number of bytes to be read."
      fgets(prisliste[index].type, 256, fil);
      index++;
  }
  fclose(fil);

  //nu indeholder index det antal prislister der er læst.
  for(int i=0;i<index;i++)
  {
      printf("Prisliste element %i\n", i);
      printf("pris: %s", prisliste[i].pris);
      printf("type: %s", prisliste[i].type);
  }

  return 0;
}

input.txt indeholder:
200kr
10m
250kr
20m

output bliver:
Prisliste element 0
pris: 200kr
type: 10m
Prisliste element 1
pris: 250kr
type: 20m
Avatar billede arne_v Ekspert
23. oktober 2002 - 16:23 #3
Hvis vi antager, at du har 2 søjler i filen med:

100 10
250 20

så kan du læse ind med:

struct vare { int pris;
                  int laengde; };

struct vare liste[100];

int n;

n = 0;
while(!feof(fp))
{
    fscanf(fp,"%d %d\n",&liste[n].pris,&liste[n].laengde);
    n++;
}
Avatar billede smokes Nybegynder
23. oktober 2002 - 16:37 #4
word up arne.. det er sgu mere elegant :-)
Avatar billede mollmannj Nybegynder
23. oktober 2002 - 16:38 #5
soreno: fgets har en char pointer som første argument, så min compiler vil ikke acceptere din metode
Avatar billede soreno Praktikant
23. oktober 2002 - 16:47 #6
ok, indrømmet - jeg kom til at kompilere med g++
følgende virker dog i gcc (til windows, mingw):
#include <stdio.h>

typedef struct
{
      char pris[256];
      char type[256];
}Prisliste;

int main(int argc, char **argv)
{
  Prisliste prisliste[100]; /*array med plads til 100 Prisliste elementer*/
  int index = 0;
  int i;
  FILE *fil;
  fil = fopen("input.txt", "rt");

  if(!fil)
    return -1;

  while(!feof(fil))
  {
      fgets(prisliste[index].pris, 256, fil); /*256 er "max number of bytes to be read."*/
      fgets(prisliste[index].type, 256, fil);
      index++;
  }
  fclose(fil);

  /*nu indeholder index det antal prislister der er læst*/ 
  for(i=0;i<index;i++)
  {
      printf("Prisliste element %i\n", i);
      printf("pris: %s", prisliste[i].pris);
      printf("type: %s", prisliste[i].type);
  }

  return 0;
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB