Pomoc z programem c++. Tworzenie wektorów

0

Witam. Piszę swój kolejny program/projekt w jezyku c++(z góry przepraszam za nazwy, cout'y w języku angielskim, ale aktualnie jestem za granica i tak jakoś..) Stworzyłem program w którym posiadam 10 pytań(nie wypisywałem wszystkich aby kod był bardziej przejrzysty), dodałem punkty za prawidłową odpowiedź etc.Aktualnie program wyświetla wszystkie pytania i sprawdza odpowiedzi po czym sumuje liczbę pkt i daje wynik zdany/niezdany.

Teraz chciałbym zrobić aby spakować wszystkie 10 pytań które stworzyłem do wektora, i stworzyć funkcje która mi np wyświetli pytanie po indeksie. Dla przykładu, będę miał 10 pytań w środku wektora, i po wpisaniu liczby 2(zostanę o nią poproszony) zostanie wywołana funkcja

q2.askQuestion();

Czy jest to możliwe? Czy mógłby mi ktoś pomóc?


#include <iostream> 
#include <string>
using namespace std;

char guess; 
int total;  

class Question{
public:
    void setValues(string, string, string, string, string, string, char, int); 
    void askQuestion(); 

private:
    string Question_Text;
    string answer_1;
    string answer_2;
    string answer_3;
    string answer_4;
    string answer_5;
    char correct_answer;
    int Question_Score;
};

int main()
{
	int R;
   string respond;
    cout << "Are you ready to start the quiz? Yes/No.\n";
    cin >> respond;

    if (respond == "Yes" || respond == "yes") {
        cout << "\n";
        cout << "Good luck!\n";
        cout << "\n";
        cout << "Press enter to continue.";
        cin.get();
        cin.ignore();
    }else{
        cout << "\n";
        cout << "Goodbye!\n";
        cin.ignore();
        cin.get();
        return 0;
    } 
    Question q1;
    Question q2;
    Question q3;
    Question q4;
    Question q5;
    Question q6;
    Question q7;
    Question q8;
    Question q9;
    Question q10;

    q1.setValues("1. What is the deepest lake in the world?",
        "Baikal",
		"Great Bear Lake",
        "Lake Michigan",
        "Lake Victoria",
        "Lake Tahoe",
        'a',
        5);

    q2.setValues("2. What is the highest place on Earth?",
        "Mount Rainier",
        "Mount Everest",
        "Mount Kinabalu",
        "Mount Damavand",
        "Nanga Parbat",
        'b',
        5);

    q3.setValues(...
;

    q4.setValues...
;

    q5.setValues(...
;

    q6.setValues(...
;

    q7.setValues(...
;

    q8.setValues(...
;

    q9.setValues(...
;
        

    q10.setValues(...
;
   
    q1.askQuestion();
    q2.askQuestion();
    q3.askQuestion();
    q4.askQuestion();
    q5.askQuestion();
    q6.askQuestion();
    q7.askQuestion();
    q8.askQuestion();
    q9.askQuestion();
    q10.askQuestion();
    

    cout << "Your Total Score is " << total << " out of 50!\n";
    cout << "\n";

    if (total > 25) {
        cout << R<<"You pass" << "\n";
        cout << "\n";
        cin.get();
        cin.ignore();
        return 0;
    }
    else
    {
        cout << "You failed... Sorry, better luck next time.\n";
        cout << "\n";
    }
    cin.get();
    cin.ignore();
    return 0;
}
 
void Question::setValues(string q, string a1, string a2, string a3, string a4, string a5, char ca, int pa)
{
    Question_Text = q;
    answer_1 = a1;
    answer_2 = a2;
    answer_3 = a3;
    answer_4 = a4;
    answer_5 = a5;
    correct_answer = ca;
    Question_Score = pa;
}

void Question::askQuestion()
{
    cout << "\n";
    cout << Question_Text << "\n";
    cout << "a. " << answer_1 << "\n";
    cout << "b. " << answer_2 << "\n";
    cout << "c. " << answer_3 << "\n";
    cout << "d. " << answer_4 << "\n";
    cout << "e. " << answer_5 << "\n";
    cout << "\n";

    cout << "What is your answer?" << "\n";
    cin >> guess;
    if (guess == correct_answer) {
        cout << "\n";
        cout << "Correct!" << "\n";
        total = total + Question_Score;
        cout << "\n";
        cout << "Press enter to continue." << "\n";
        cin.get();
        cin.ignore();
    }
    else 
    {
        cout << "\n";
        cout << "Sorry, you're wrong..." << "\n";
        cout << "The correct answer is " << correct_answer << "." << "\n";
        cout << "\n";
        cout << "Press enter to continue." << "\n";
        cin.get();
        cin.ignore();
    }
}
1
vector<Question> questions = { q1, q2, q3, q4, ... };
int number = 2;
questions[number - 1].askQuestion();

Zamiast setValue() klasa Question powinna mieć konstruktor, który przyjmuje te parametry, ale to już inny problem.

0

Nie rozumiem za bardzo koncówki,

int number = 2;
questions[number - 1].askQuestion();

Ok, stworzyłem wektor tak jak wskazałeś

<Question> questions = { q1,q2,q3,q4,q5,q6,q7,q8,q9,q10};
cout<<"Ktore pytanie chciałbyś wczytać?";
cin>>load(zadeklarowałem wcześniej)

i jak teraz mam przekazać że np wpisana liczba 2, ma pasować do q2, a wpisana liczba 5 ma pasować do q5? na myśl mi przychodzi tylko switch..ale wiem że to nie jest dobry wybór.

E: Może lepiej by było zrobić funkcje która będzie odpowiedzialna za wczytywanie ktoregoś tam pytania? Co nie zmienia faktu, że wciąż nie wiem jak zrobić aby wpisana liczba 2 odpowiadała q2

1
questions[load - 1].askQuestion();
0

Program niestety nie wyświetla się poprawnie.

https://zapodaj.net/0269e57232d7b.jpg.html

e: wszystko działa, wkleiłem w złym miejscu. Dziękuje bardzo!

1

Pytania ładuj z pliku i problem sam się rozwiąże,

class Question
{
public:
    void LoadFrom(istream &inputs)
    {
          if (getline(inputs, question) >> correct >> ws)
          {
              string answer;
              while(getline(inputs, answer) && !answer.empty())
              {
                    answers.push_back(answer);
              }
          }
    }

    voit Print(ostream &output) const
    {
          … …
    }

    bool IsValidAnswear(int answer) const
    {
          … …
    }

private:
    string question;
    int correct;
    vector<string> answers;
};
0

Przepraszam bardzo za dużo pytań, ale jestem początkujący a chce coś zacząć tworzyć..
Właśnie nie mogę wczytywać pytań, bo chce to kontynuować dalej, a wczytanie z pliku by mi to uniemożliwiło.

Mam ostatnie pytanie:
Czy jest teraz możliwość stworzenia dodatkowej funkcji która będzie miała na celu dodanie pytania do mojego wektora? W sensie że po wywołaniu tej funkcji, będę miał możliwość wprowadzenia pytania z klawiatury, 5 odpowiedzi(bo tyle mam w pytaniach powyżej) itd i to pytanie zostanie dodane na koniec mojego wektora?

Bardzo bym prosił o pomoc w ostatnim zadaniu, pozdrawiam.

1
void addQuestion(vector<Question>& questions)
{
    Question q;
    // dodanie pytań, odpowiedzi itd.
    questions.push_back(q);
}
0

Jesteś wielki, dziękuje.

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