🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #5920

Re: X aantal keer dezelfde waarde in een array ???

#5920
From: Roel Schroeven
Date: Mon, 17 Feb 2003 10:40
74 lines
3309 bytes
Christof Laeremans wrote:
> Hallo,
> 
> Ik vul een array op met gegevens die ik inlees vanuit een file personen.txt.
> Als ik een cout doe in de lus van het opvullen dan krijg ik alle personen
> die in de array steken.
> Vraag ik om een beetje verde in de code terug die array af te drukken, dan
> drukt hij altijd x aantal keer de laatste persoon af ....
> Hoe komt dit, wat doe ik fout, ....
> Als compiler gebruik ik Metrowerks Codewarrior
> 
> Hierbij ook de code om een idee te krijgen

Ik ga de niet-relevante stukken wegknippen en proberen de relevante te 
laten staan:

> char _persoon[perslengte];
> char _personen[arrlengte];
> char *_pers[arrlengte];
 >
> //pointer toekenning
> 
> *_pers = _personen;
> 
> while(! _bestand.eof()) {
>     _bestand.getline(_persoon, 20);
>     _pers[pteller] = _persoon;
>     pteller++;
> }

Hier wordt telkens
- een lijn uit het bestand ingelezen in de char array _persoon
- de desbetreffende char pointer gelijkgesteld aan het adres van _persoon

Omdat nu alle leden van _pers verwijzen naar _persoon, zal je inderdaad 
de laatste waarde van _persoon krijgen als je _pers[...] dereferenced:

> for(teller = 0; teller < arrlengte; teller++) {
>     cout<<_pers[teller];
> }

Oplossing:
- ofwel blijf je op de C-manier werken, en maak je van _pers een array 
van char arrays i.p.v. een array van pointers
- ofwel maak je jezelf het leven gemakkelijk, en werk je op de 
C++-manier: gebruik string en vector. Dan kan je ineens ook die 
arbitraire perslengte etc. achterwege laten.

Dan krijg je zoiets:

string _persoon;   // waarvoor dient die '_' trouwens??
vector<string> _personen;

while(! _bestand.eof()) {
     getline(_bestand, _persoon);
     _personen.push_back[_persoon];
}

/*
of nog iets korter:
while(getline(_bestand, _persoon))
     _personen.push_back[_persoon];
*/

// ...

for(teller = 0; teller < arrlengte; teller++) {
     cout << _personen[teller];
}


-- 
"Codito ergo sum"
Roel Schroeven
Technical Details
Message-ID: <t_24a.56738$Jd.6557@afrodite.telenet-ops.be>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-03!sn-xit-01!sn-xit-06!sn-xit-08!supernews.com!easynet-quince!easynet.net!oleane.net!oleane!bnewspeer01.bru.ops.eu.uu.net!emea.uu.net!skynet.be!skynet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail
References: <BA754066.DA81%christof_laeremans@hotmail.com>

Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit
X-Google-Thread: fcea4,870209156de5937a
X-Google-Attributes: gidfcea4,public
X-Google-ArrivalTime: 2003-02-17 02:42:03 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-03!sn-xit-01!sn-xit-06!sn-xit-08!supernews.com!easynet-quince!easynet.net!oleane.net!oleane!bnewspeer01.bru.ops.eu.uu.net!emea.uu.net!skynet.be!skynet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail
From: Roel Schroeven <ed5wcylnn2001@sneakemail.com>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.3b) Gecko/20030210
X-Accept-Language: en-us, en
MIME-Version: 1.0
Newsgroups: be.comp.programming
Subject: Re: X aantal keer dezelfde waarde in een array ???
References: <BA754066.DA81%christof_laeremans@hotmail.com>
In-Reply-To: <BA754066.DA81%christof_laeremans@hotmail.com>
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit
Lines: 75
Message-ID: <t_24a.56738$Jd.6557@afrodite.telenet-ops.be>
Date: Mon, 17 Feb 2003 10:40:25 GMT
NNTP-Posting-Host: 213.224.39.87
X-Complaints-To: abuse@telenet.be
X-Trace: afrodite.telenet-ops.be 1045478425 213.224.39.87 (Mon, 17 Feb 2003 11:40:25 MET)
NNTP-Posting-Date: Mon, 17 Feb 2003 11:40:25 MET
Organization: Telenet Internet