Avatar billede trold Nybegynder
20. marts 2000 - 18:13 Der er 6 kommentarer og
1 løsning

Array Af en Struktur Variabel

Hvordan laver man et array af en struktur variabel indlæst fra en tekstfil (empl.dat)??

f.eks

struct empltype
{
int pers_no;
char name[50];
}

Avatar billede dmk Nybegynder
20. marts 2000 - 18:40 #1
Du kan lave et statisk array på følgende måde:

empltype Array[NUMBER];

Så kan du indexere i det ved at skrive fx.:

Array[0].pers_no;

Hvis du ikke på forhånd kender størrelsen af dit array (dvs. når du laver programmet)
kan du lave arrayet med variabel størrelse ved at lave følgende:

empltype* Array=new empltype[Number];

hvor Number er en variabel indeholdende antallet af elementer (som du vel har læst fra din datafil).

DMK

Avatar billede dmk Nybegynder
20. marts 2000 - 18:43 #2
Ups, jeg glemte lige: Hvis du laver den dynamiske udgave laver du noget hukommelses allokering når du kalder new operatoren. Dette hukommelse er du selv ansvarlig for at slette igen! Det gør du ved at skrive:

delete[] Array;


Hvis du på et tidspunkt skal have forøget dit array, kan du gøre det på følgende måde:

empltype* NewArray=new empltype[NewSize];
for (int i=0; i<OldSize; i++)
NewArray[i]=Array[i];
deltet[] Array;
Array=NewArray;

DMK
Avatar billede trold Nybegynder
21. marts 2000 - 10:42 #3
OK jeg er Newbie, så knap så hurtig :-)

Global variabel
antal_pers = 10

Min struktur
struct empltype
{
int pers_no;
char name[50];
}

Mit array
empltype empldata[antal_pers];

Så læser jeg min fil - sådan her ??

ifstream empldata_fil("c:\\empl.dat");

empldata_fil.read((char *) &empldata, sizeof(empltype));

Så fylder jeg værdier i mit array

i = 0
while (!empldata_fil.eof() && i < antal_varenr)

empldata_fil >> empldata[i].pers_no;
empldata_fil >> empldata[i].name;

i++;

Men ovenstående virker desværre ikke, er jeg helt på vildspor ??

Avatar billede trold Nybegynder
21. marts 2000 - 10:44 #4
while (!empldata_fil.eof() && i < antal_varenr)

skulle være

while (!empldata_fil.eof() && i < antal_pers)

Avatar billede dmk Nybegynder
21. marts 2000 - 11:30 #5
Jeg ved ikke om du bare har glemt det her, eller om det er cut-paste fra din c++ fil? Men du mangler i hvert fald et par tuborklammer:

i = 0
while (!empldata_fil.eof() && i < antal_varenr)

empldata_fil >> empldata[i].pers_no;
empldata_fil >> empldata[i].name;

i++;

Her vil det kun være den første linie der bliver udført i din while. For at det er dem alle skal du huske at lave et scope:

while (!empldata_fil.eof() && i < antal_varenr)
{
  empldata_fil >> empldata[i].pers_no;
  empldata_fil >> empldata[i].name;
  i++;
}

Om det er det der er fejlen ved jeg ikke. Jeg bruger ikke denne måde at læse fra filer på.
Men jeg kigger lige på det senere.

DMK
Avatar billede dmk Nybegynder
23. marts 2000 - 11:01 #6
Har du testet om din indlæsnings rutine virker?

Det med at læse data fra en fil har efterhånden været heftigt diskuteret her i denne kategori. Du kan evt. kigge lidt tilbage i nogle af de besvarede spørgsmål.

Jeg vil også gerne vide hvordan dit filformat ser ud? Er det en ren tekstfil, hvor der står fx.:
1 Hans
2 Jens

Eller er det en datafil, hvor de forskellige data er gemt i binær form? Grunden til at jeg spørger er, at du ikke bare lige sådan kan indlæse tal fra en tekstfil. Du skal selv sørge for at konvertere tallene.

Skriv lige lidt om hvordan du gør, og læg evt. noget mere kode herop. Så skal jeg nok lige kigge på det.

DMK
Avatar billede trold Nybegynder
23. marts 2000 - 18:15 #7
Jeg har fået løst problemet

Tak for din ihærdige hjælp .-)
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