Lotto - gdzie jest nieskończona pętla?

Odpowiedz Nowy wątek
2011-10-23 17:46
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!"; 
} 

edytowany 1x, ostatnio: merlinnot, 2011-10-23 17:46

Pozostało 580 znaków

2011-10-23 18:04
0

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


Pokaż pozostałe 3 komentarze
Za zdanie "Nie mogę użyć debuggera, ponieważ nie mam windowsa, a nie znalazłem działającego na linuksa." powinno to iść do perełek. - hauleth 2011-10-23 18:51
Albo zainstaluj Eclipse CDT. - [losowa nazwa] 2011-10-23 19:05
Co i tak niewiele da bez zainstalowanego GDB, który jest nota bene jednym z lepszych darmowych debuggerów. - hauleth 2011-10-23 19:07
@winerfresh: ale pod linuxem to nie problem go zainstalować... to debugger a nie kompilator ;p - [losowa nazwa] 2011-10-24 00:38
Sorry, zaćpany byłem. - hauleth 2011-10-24 13:06

Pozostało 580 znaków

2011-10-23 19:32
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.


Pozostało 580 znaków

2011-10-23 20:29
Naos
0

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

Pozostało 580 znaków

2011-10-23 20:50

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!"; 
}

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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