Lotto - gdzie jest nieskończona pętla?

0

Witam!

Czy moglibyście mi powiedzieć, dlaczego ten program się nie kończy? Nie mogę użyć debuggera, ponieważ nie mam windowsa, a nie znalazłem działającego na linuksa. Analizowałem ten kod, ale nie ogarniam :(

#include <iostream>
#include <list>
#include <vector>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main() {
cout << "Witaj w Lotto!" << "\n\n";
int temp;
vector<int>guesslist;
cout << "Wpisz szesc liczb naturalnych z przedzialu <1, 49>"<< endl;
for (int i=0; guesslist.size()!=6; i++)
{
	cout << i+1 << ": "<< endl;
	cin >> temp;
	tutaj:
	if (1>temp || temp>49)
		{
			cout << "wprowadzono niepoprawna wartosc liczbowa, sprobuj ponownie: ";
			cin >> temp;
			cout << endl;
			goto tutaj;
		}
	stad:
	for (int j=0; j!=guesslist.size(); j++)
	{
		if (temp==guesslist[j])
		{
			cout << "Ta liczba zostala juz wybrana, wybierz inna:";
			cin >> temp;
			cout << endl;
			goto stad;
		}
	}
guesslist.push_back(temp);
}
cout << "Wylosowane liczby to: ";	
int wylosowana;
srand(int(time(NULL)));
vector<int>pseudolosowe;
for (int i=0; i!=6; i++)
{
	inna:
	wylosowana=rand()%49+1;
	for (int j=0; j!=pseudolosowe.size(); j++)
	{
		if (wylosowana==pseudolosowe[j]);
		goto inna;
	}
	pseudolosowe.push_back(wylosowana);
	cout << wylosowana << " ";
}
cout << endl;
int trafienia=0;
/* SPRAWDZANIE */
for (int i=0; i!=6; i++)
	for (int j=0; j!=6; j++)
	{
		if (guesslist[i]=pseudolosowe[j])
		{
		trafienia++;
		break;
		}
	}
cout << "Ilosc trafien: " << trafienia;
if (trafienia>=3)
	cout << endl << "gratulujemy!";	
} 
0

Debugger w łapkę. "Szukajcie, a znajdziecie" (Mt 7:7; Łk 11:9)

0

Ludzie, ja wiem, że są debuggery na linuksa. Pół dnia spędziłem na pobieraniu i testowaniu kolejnych, ale nie radzę sobie z nimi. Te, które mają tryb graficzny, sypią się jak piasek w klepsydrze, albo i tak włączają tryb tekstowy. A trybu tekstowego nie ogarniam... Próbowałem już nawet instalować windowsowe w wine, ale to jest porażka.

0

najlepiej zastąp wszystkie intrukcje goto pętlami, bo właśnie przez goto nie ciężko znaleŹć jakieś błędy...

0

Działa:

 #include <iostream>
#include <vector>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main() {
cout << "Witaj w Lotto!" << "\n\n";
int temp;
vector<int>guesslist;
cout << "Wpisz szesc liczb naturalnych z przedzialu <1, 49>"<< endl;
for (int i=0; i!=6; i++)
{
        cout << i+1 << ": ";
        cin >> temp;
        cout << endl;
        check:
        if (temp>49 || temp<1)
        {       
                cout << "Podana liczba jest nieprawidlowa, ponow probe: ";
                cin >> temp;
                cout << endl;
                goto check;
        }
        for (unsigned short int j=0; j<guesslist.size(); j++)
        {
                if (temp==guesslist[j])
                {
                        cout << "Ta liczba została już wprowadzona, ponow probe: ";
                        cin >> temp;
                        cout << endl;
                        goto check;
                }
        }
        guesslist.push_back(temp);
}
cout << "\n\n" << "Wylosowane liczby to: ";     
srand(int(time(NULL)));
vector<int>pseudolosowe;
while (pseudolosowe.size()!=6)
{
        temp=rand()%49+1;
        randcheck:
        for (unsigned short int j=0; j<pseudolosowe.size(); j++)
        {
                if (temp==pseudolosowe[j])
                {
                        temp=rand()%49+1;
                        goto randcheck;
                }
        }
        pseudolosowe.push_back(temp);
        cout << temp << " ";
}
/* SPRAWDZANIE */
int trafienia=0;
for (int i=0; i!=6; i++)
{
        for (int j=0; j!=6; j++)
        {
                if (guesslist[i]==pseudolosowe[j])
                {
                trafienia++;
                break;
                }
        }
}
cout << endl << "Ilosc trafien: " << trafienia;
if (trafienia>=3)
        cout << endl << "gratulujemy!"; 
}

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