Losowanie wyświetlanie odpowiedzi w quizie c++

0

Witam, mam problem z losowaniem vectora, gdyż jak próbuje losowań jedynym znanym mi sposobem to losuje mi zawartość odpowiedzi.
przykład: Odpowiedzi to a) monitor b) myszka c) komputer d)stacja; chcę aby wymieszało mi kolejność odpowiedzi a poniższy kod losuje mi odpowiedź np: a) nitormo

KOD:

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <algorithm>
#include <string>
#include <vector>
#include <random>
#include <ctime>
#include <iterator>


using namespace std;

std::vector<std::string> split_by(const std::string& text, char sep) {
    std::vector<std::string> tokens;
    std::size_t start = 0, end = 0;
    while ((end = text.find(sep, start)) != std::string::npos) {
        tokens.push_back(text.substr(start, end - start));
        start = end + 1;
    }
    tokens.push_back(text.substr(start));
    return tokens;
}


struct pytanie {
    string trescpytania;
    string odpowiedzprawidlowa;
    vector<string> odpowiedzi;
};


class test
{
private:
    vector<pytanie> pytania;

public:
    void read_questions(const char* path)
    {
     
        fstream plik(path);
        if (plik.is_open())
        {
            string linia = "";
            while (getline(plik, linia))
            {
                pytanie pytanie;
                vector<string> split = split_by(linia, ',');

                pytanie.trescpytania = split[0];
                pytanie.odpowiedzprawidlowa = split[1];

                for (size_t i = 1; i < split.size(); ++i)
                {
                    pytanie.odpowiedzi.push_back(split[i]);
                }

                pytania.push_back(pytanie);
            }
            plik.close();
        }
    }





    void print()
    {

        std::random_device rd;
        std::mt19937 g(rd());

        std::shuffle(pytania[0].odpowiedzi[0].begin(), pytania[0].odpowiedzi[0].end(),g);

        

        for (size_t i = 0; i < pytania.size(); ++i)
        {
            cout << "Pytanie: " << pytania[i].trescpytania
                << "\nOdpowiedz: [" << pytania[i].odpowiedzprawidlowa << "]"
                << "\nWarianty:\n";

            
            char iter = 'a';
            for (size_t j = 0; j < 4; ++j)
            {
                cout << iter++ << "). " << pytania[i].odpowiedzi[j] << "\n";
            }


            cout << "\n";
        }
    }
};

int main()
{
    test t;
    t.read_questions("quiz.txt");
    t.print();
    return 0;
}

1
-std::shuffle(pytania[0].odpowiedzi[0].begin(), pytania[0].odpowiedzi[0].end(),g);
+std::shuffle(pytania[0].odpowiedzi.begin(), pytania[0].odpowiedzi.end(),g);
1

Kod robi co mu każesz :)

std::shuffle(pytania[0].odpowiedzi[0].begin(), pytania[0].odpowiedzi[0].end(),g);

czym jest tutaj pytania[0].odpowiedzi[0]?

0

@kq: Działa, dziękuje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1