Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Pętla while wykonuje w nieskończoność ostatnie polecenie.

Ostatnio zmodyfikowano 2014-09-01 22:44
Autor Wiadomość
SquBany
Temat założony przez niniejszego użytkownika
Pętla while wykonuje w nieskończoność ostatnie polecenie.
» 2014-09-01 22:22:51
Zaczałem prace nad projektem gry roguelike (praktyka czyni mistrza, trzeba ćwiczyć a nie tylko czytać). Najpierw chciałem obmyślić jak będzie działał system poruszania się. Wymyśliłem że po kierunkach, dokładnie europejskich skrótach kierunków. Zrobiłem nie poukładany brzydki program by tylko sprawdzić czy tak jak myślę jest dobrze. Okazało się że mniej więcej tak. Robiąc pętlę w każdej funkcji (funkcja dla każdego miejsce, moim zdaniem dobry pomysł) aby nie zakoń... Wrzuce po prostu kod i opisze co jest nie tak
C/C++
void potem1()
{
    cout << "Cos";
    cin >> wybor;
    int i = 0;
    while( i == 0 )
    {
        switch( wybor )
        {
        case 'e':
            start();
            break;
        case 'E':
            start();
            break;
            default:
            cout << "Nie ma takiego wyjscia!";
            break;
        }
    }
}
To jest kod miejsca do którego chcę przejśćpo starcie. Mianowicie próbując wpisać będąc w tej lokacji literę np. t, funkcja w nieskońćzoność wypisuje defaulta. Coś źle napisałem w tej funkcji ? Jak ktoś chce niżej kod tego czegoś co ma być testem:
C/C++
#include <iostream>

using namespace std;

char wybor;

void start();

void potem1()
{
    cout << "Cos";
    cin >> wybor;
    int i = 0;
    while( i == 0 )
    {
        switch( wybor )
        {
        case 'e':
            start();
            break;
        case 'E':
            start();
            break;
            default:
            cout << "Nie ma takiego wyjscia!";
            break;
        }
    }
}

void potem2()
{
    cout << "Cos";
    cin >> wybor;
    if( wybor == 'n' || wybor == 'N' )
         start();
   
}


int main()
{
    while( true )
    {
        start();
    }
    return 0;
}

void start()
{
    cout << "To startowe miejsce. Wpisz 'W'";
    cin >> wybor;
   
    if( wybor == 'w' || wybor == 'W' )
         potem1();
   
    if( wybor == 's' || wybor == 'S' )
         potem2();
   
}
Wykorzystałem sposób aby najpierw dawać
void start();
 a pod mainem co jest w środku. Dlaczego tak ? Bo jak dałem nad potem1 i potem 2 funkcje start to kompilator krzyczał że potem1 i potem2 nie było zdeklarowane. A jak dam start pod tymi funkcjami to krzyczy że start nie był zdeklarowany.
P-116539
Monika90
» 2014-09-01 22:35:59
Ponieważ
cin >> wybor;
 nie jest wewnątrz pętli, to zmienna wybor ma przy każdym obiegu pętli tę samą wartość i dlatego wybierana jest ciągle ta sama sekcja switcha.
P-116544
SquBany
Temat założony przez niniejszego użytkownika
» 2014-09-01 22:44:37
Zaraz... no tak... Przylepić kartke z napisem "!!!MYŚL!!!" bo czasem tego nie robię ._.
P-116545
« 1 »
  Strona 1 z 1