Archief - [ALG][C++] Willekeurige lijn uit bestand

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Crazed

Legacy Member
Ik probeer een willekeurige lijn uit een txt bestand te lezen en gebruik daarvoor volgende code:
Code:
fstream bestand;
bestand.open("woorden.rvf", fstream::in);
char buffer[20];
if(!bestand)
{
    cout << "Kon het bestand niet openen";
}
else
{
    // bestand kon worden geopend
    char aantal_woorden[3];
    bestand.getline(aantal_woorden, 3);

    int regels = atoi(aantal_woorden);
           
    srand(time(NULL));
    char woord[64];
    int random = regels*rand()/(RAND_MAX+1);
           
    cout << "random: " << random;
           
    for(int i = 0; i < random; i++)
    {
        bestand.getline(woord, 64);
    }
           
    cout << endl << random << endl << woord[0] << woord[1] << woord[2];
}

Het in te lezen bestand heeft op z'n eerste regel staan hoeveel woorden (lijnen met woorden dus) er in het bestand staan. (Als iemand weet hoe ik dit automatisch door C++ kan laten tellen, be my guest) Dit aantal wordt opgeslaan in de variabele "regels"

Het echte probleem zit hem echter in het selecteren van een willekeurige lijn. Dit is helemaal niet willekeurig. Na drie keer uitvoeren, krijg ik 3x dezelfde waarde, wat dus niet de bedoeling is... Waar zit de fout??

Tyfius

Legacy Member
In de rapte en dus verre van perfect.
Code:
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main()
{
    string filename;
    char c;
        
    srand((unsigned)time(NULL));
    
    cout << endl << "Naam van het bestand: ";
    cin >> filename;
    cout << endl;
    
    ifstream d_file;
    d_file.open(filename.c_str());
    if (!d_file.is_open())
    {
        cout << "Bestand " << filename << " bestaat niet." << endl;
        exit(1);
    }
    else
    {        
        //prints the number of lines in a file
        string t;
        int lines = 0;
        int random = 0;

        while(getline(d_file, t, '\n'))
        {
            ++lines;
        }            

        cout << "Aantal lijnen in het bestand: " << lines << endl;
        
        random = (rand() % lines) + 1;
        cout << "Random getal: " << random << endl;
        
        for (int i = 1; i < random; i++)
        {
            getline(d_file, t, '\n');
        }
        cout << "Random lijn: " << t << endl;
    }
    d_file.close();    
    return 0;
}
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan