Czemu pętla wykonuje się tylko raz???

0

Witam, niedawno zacząłem zabawę z programowaniem, znam podstawowe funkcje i uznałem że czas napisać pierwszy większy program.
Program ma zgadywać o jakim kraju (Ameryki Południowej bo tam jest najmniej państw nie licząc Oceani) myśli użytkownik zadając mu serie pytań jednak pytania nie mają iść zawsze tą samą drogą np.: "jeśli tak to zadaj to i to pytanie a jeśli nie to to i to" :)
Niestety pętla odpowiedzialna za właściwie cały program wykonuje się tylko raz, a więc pytanie zadawane jest tylko jedno. (wiem że są tylko 2 pytania ale niedługo dodam więcej chodzi mi teraz o sam kod a nie liczbę pytań).
Oto program:

#include <iostream>
#include <string>
#include <time.h>

int main()
{
    std::string pytania[3] = {"czy w większosci ten kraj lezy na polnocy ameryki poludniowej(Paragwaj lezy na poludniu) ?","Czy ten kraj lezy na oceanem Spokojnym ?"};
    int wykorzystane_pytania[3] = {0,0,0}; 
    std::string kraje[13] = {"Kolumbia","Wenezuela","Gujana","Surinam","Gujana Francuska","Ekwador","Peru","Brazylia","Boliwia","Paragwaj","Chile","Argentyna","Urugwaj"};
    int odp[3][13] = {{1,1,1,1,1,1,1,1,1,0,0,0,0},{1,0,0,0,0,1,1,0,0,0,1,0,0},{}};
    int wynik[13] = {1,1,1,1,1,1,1,1,1,1,1,1,1};
    bool wygrana = false;
    int n, a;
    std::string odpowiedz;
    
    while(wygrana == true);
    {
        srand(time(NULL));              
        n = rand()%2;
        
        if(wykorzystane_pytania[n] == 0)
        {
        std::cout << pytania[n] << std::endl;
        }else{
            continue;
        }
        
        wykorzystane_pytania[n] = 1;
                    
        std::cin >> odpowiedz;                          //czekanie na odpowiedz tak / nie
        
        if(odpowiedz == "tak")                          //sprawdzanie dla odpowiedzi "tak"
        {
            for(int i = 0; i < 13; i++)
            {
                if(odp[n][i] == 0)
                {
                    wynik[i] = 0;    
                }
            }
        } 
        if(odpowiedz == "nie")                          //sprawdzanie dla odpowiedzi "nie"
        {
            for(int i = 0; i < 13; i++)
            {
                if(odp[n][i] == 1)
                {
                    wynik[i] = 0;    
                }
            }
        }
        a = 0;
        for(int i = 0; i < 13; i++)                     //sprawdzanie końca gry
        {
            if(wynik[i] == 1)
            {
                a = a + 1;    
            }
                            
        }
        if(a == 1)
        {
            for(int i = 0; i < 13; i++)
            {
                if(wynik[i] == 1)
                {
                    wygrana == true;
                    std::cout << kraje[i];
                }   
            }
        }    
    }
    system("PAUSE");
    return 0;
}

z góry dzięki za pomoc i Pozdrawiam

3
  1. Wklejaj kody w znaczniki <``code=cpp>tu kod<``/code>
  2. Pozbądź się smrodku przy inkrementacji: http://4programmers.net/Forum/1101404
  3. srand(time(NULL)); - użyj raz (tylko) na początku programu
  4. wygrana może mieć wartość true lub false ale nie możesz jak człowiek użyć w warunku wygrana więc używasz wygrana==true ale, wygrana==true może mieć wartość true lub false ale nie możesz użyć w warunku wygrana==true więc używasz (wygrana==true)==true ale, (wygrana==true_==true może mieć wartość true lub false ale nie możesz użyć w warunku (wygrana==true)==true więc używasz ((wygrana==true)==true)==true ale, ... mniej niż 16 powtórzeń jakoś zbyt mainstreamowo wygłada.
  5. Zapoznaj się zе składnia pętli: - while(wygrana == true); - nie działa tak jak oczekujesz
  6. Napisz przed main'em ewentualnie wewnątrz main'a na początku raz using namespace std; zamiast masturbacji z std::

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