Article View: be.comp.programming
Article #5920Re: X aantal keer dezelfde waarde in een array ???
From: Roel Schroeven
Date: Mon, 17 Feb 2003 10:40
Date: Mon, 17 Feb 2003 10:40
74 lines
3309 bytes
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-mailReferences:
<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