🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: be.comp.programming
2 messages
2 total messages Started by Christof Laeremans Sun, 16 Feb 2003 12:19
X aantal keer dezelfde waarde in een array ???
#5914
Author: Christof Laeremans
Date: Sun, 16 Feb 2003 12:19
154 lines
3334 bytes
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

#include <iostream.h>

#include <fstream.h>

#include <stdio.h>

#include <stdlib.h>

#include <time.h>



int main() {



//****************************************************

//                      VARIABELEN & CONSTANTEN

//****************************************************

const int arrlengte = 15;

const int perslengte = 20;

const unsigned int grens = 15;



char _persoon[perslengte];

char _personen[arrlengte];

char *_pers[arrlengte];



int gekozenwaarden[arrlengte];

int pteller = 0;

int teller = 0;

int index = 0;

int randnummer = 0;



bool dubbel;







//****************************************************

//                      PROGRAMMA

//****************************************************



//pointer toekenning

*_pers = _personen;

//Inlezen van de file personen.txt

ifstream _bestand("C:\\personen.txt");

//inlezen van de personen in de array _personen

//weergeven bericht

cout<<"Volgende personen worden verwerkt in de planning: "<<endl;

while(! _bestand.eof()) {

    _bestand.getline(_persoon, 20);

    _pers[pteller] = _persoon;

    pteller++;

}

//Willekeurig nummer maken.
srand(time(NULL));

for(int i = 0; i < arrlengte; i++) {

    dubbel = false;

    gekozenwaarden[i] = rand()%grens;

    for(int j = i-1; j > 0; j--) {

        if(gekozenwaarden[i] == gekozenwaarden[j]) {

            i--;

            dubbel = true;

            break;

        }
      
    }

   if(dubbel) {

        continue;

    }

}

for(teller = 0; teller < arrlengte; teller++) {

    cout<<_pers[teller];

}



        

return 0;



}

Alvast bedankt voor de eventuele tips en opmerkingen.

Mvg,

Christof Laeremans
Re: X aantal keer dezelfde waarde in een array ???
#5920
Author: 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
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads