Problem ze sprawdzaniem w liście

0

Witam! Mam problem z programem, mianowicie podczas sprawdzania w funkcji graj istnienia pary na podstawie listy jednokierunkowej, program widzi w niej jedynie dwa elementy. Lista tworzy się poprawnie, sprawdzałem ją w oddzielnym programie.

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>

using namespace std;

struct Pary{
    string wyraz1;
    string wyraz2;
    Pary *next;
};

int ile_par(){
    int a;
    cout<<"Ile chcesz miec par w grze? (minimum 3) ";
    cin>>a;
   /* while (a<3){
        cout<<"Podano za mala wartosc. Minimalna wartosc par to 3. Podaj wlasciwa ilosc par ";
        cin>>a;
    }*/
    return a;
}

int *tworz (int w){
    int *tab=new int[w];
    return tab;
}

void nr_wierszy (int tab[], int w, int kp){
    int pom1=(0+(kp-1))*rand()/RAND_MAX;
    tab[0]=pom1;
    int ile=1;
    for (int i=1; i<w; i++){
        int pom;
        pom=(0+(kp-1))*rand()/RAND_MAX;
        bool is=false;
        while (is!=true){
            for (int j=0; j<ile; j++){
                if (pom==tab[j]) {is=false; break;}
                else is=true;
            }
            if (is==false) pom=(0+(kp-1))*rand()/RAND_MAX;
        }
        tab[i]=pom;
        ile++;
    }
}

string *tworz2 (int k){
    string *tab=new string[k];
    return tab;
}

void wczytaj_dane (string tab1[], string tab2[], string nazwa_pliku, int w, int tab3[]/*, Pary *&glowa*/){
    ifstream dane;
    //Pary *aktualny;
    //glowa=NULL;
    int ile;
    for(int i=0; i<w; i++){
        dane.open(nazwa_pliku.c_str());
        string dane1, dane2;
        ile=-1;
        do{
            dane>>dane1>>dane2;
            ile++;
        }while (ile!=tab3[i]);
        tab1[i]=dane1;
        tab2[i]=dane2;
       /* aktualny = new Pary;
        aktualny->wyraz1=dane1;
        aktualny->wyraz2=dane2;
        aktualny->next=glowa;
        glowa=aktualny;*/
        dane.clear();
        dane.close();
    }
}

Pary *utworz_liste(/*Pary *&glowa, */string tab1[], string tab2[], int w){
    Pary *aktualny, *temp, *glowa;
	aktualny=NULL;
	glowa=NULL;
	for (int i=0; i<w; i++) {
		temp=aktualny;
		aktualny = new Pary;
		aktualny-> wyraz1=tab1[i];
		aktualny-> wyraz2=tab2[i];
		aktualny-> next = NULL;
		if(temp==NULL) glowa=aktualny;
		else temp->next=aktualny;
	}
	return glowa;
}

void wymieszaj_druga_tabele (int tab1[], string tab2[], string tab3[], int w){
    for (int i=0; i<w; i++){
        tab3[tab1[i]]=tab2[i];
    }
}

void graj(string tab1[], string tab2[], Pary *glowa, int &znalezionych_par, int &ile_ruchow, int w){
    bool is;
    Pary *pocz;
    pocz=glowa;
    for(int i=0; i<w;){
        int	karta1, karta2;
        cout<<"Podaj numer pierwszej karty ";
        cin>>karta1;
        while(tab1[(karta1)-1]=="0"){
            cout<<"Blad, podales uzyta karte. Wybierz inna. ";
            cin>>karta1;
        }
        cout<<"Wybrales karte "<<tab1[(karta1)-1]<<endl;
        cout<<"Podaj numer drugiej karty ";
        cin>>karta2;
        while(tab2[(karta2)-1]=="0"){
            cout<<"Blad, podales uzyta karte. Wybierz inna. ";
            cin>>karta2;
        }
        cout<<"Wybrales karte "<<tab2[(karta2)-1]<<endl;
        ile_ruchow++;
        is=false;
        if(tab1[(karta1)-1]==glowa->wyraz1 && tab2[(karta2)-1]==glowa->wyraz2){
            tab1[(karta1)-1]="0";
            tab2[(karta2)-1]="0";
            is=true;
            znalezionych_par++;
        }
        else{
            do{
                glowa=glowa->next;
                if(tab1[(karta1)-1]==glowa->wyraz1 && tab2[(karta2)-1]==glowa->wyraz2){
                    tab1[(karta1)-1]="0";
                    tab2[(karta2)-1]="0";
                    is=true;
                    znalezionych_par++;
                }
                //glowa=glowa->next;
            }while(glowa==NULL);
        }
		glowa=pocz;
        if (is==true) cout<<"Brawo! Znalazles pare!"<<endl;
        else cout<<"Niestety, pomyliles sie. Sprobuj jeszcze raz"<<endl;
        i=znalezionych_par;
    }
}

void usun(Pary *&glowa){
    Pary *pom;
    do{
        pom=glowa;
        glowa=glowa->next;
        delete pom;
    }while(glowa==NULL);
}

int main(){
    srand(time(NULL));
    int liczba_par;
    int *wybr_wiersze, *wymieszane_wiersze;
    string *wyrazy1, *wyrazy2, *wyrazy3;
    Pary *poczatek;
   // poczatek=new Pary;
    int ruchy=0;
    int znalezione=0;
    liczba_par=ile_par();
    wybr_wiersze=tworz(liczba_par);
    wymieszane_wiersze=tworz(liczba_par);
    nr_wierszy (wybr_wiersze, liczba_par, 19);
    nr_wierszy (wymieszane_wiersze, liczba_par, liczba_par);
    wyrazy1=tworz2(liczba_par);
    wyrazy2=tworz2(liczba_par);
    wyrazy3=tworz2(liczba_par);
    wczytaj_dane (wyrazy1, wyrazy2, "C://Memory/a.txt", liczba_par, wybr_wiersze/*, poczatek*/);
    poczatek=utworz_liste(/*poczatek, */wyrazy1, wyrazy2, liczba_par);
    wymieszaj_druga_tabele (wymieszane_wiersze, wyrazy2, wyrazy3, liczba_par);
    graj (wyrazy1, wyrazy3, poczatek, znalezione, ruchy, liczba_par);
    cout<<"Znalazles "<<znalezione<<" par w "<<ruchy<<" ruchach"<<endl;
    cout<<"Twoj wynik to "<<(znalezione*20)-ruchy<<endl;
    delete []wybr_wiersze;
    delete []wymieszane_wiersze;
    delete []wyrazy1;
    delete []wyrazy2;
    delete []wyrazy3;
    usun (poczatek);
    return 0;
}
0

Tyle ile par się zadeklarowało na początku

0

Edit:
Znalazłem błąd, pomoc już nie jest potrzebna :D

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