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

Problem z goto

Ostatnio zmodyfikowano 2008-07-24 12:52
Autor Wiadomość
sebastian380
Temat założony przez niniejszego użytkownika
Problem z goto
» 2008-07-23 17:29:15
Witam.
Napisałem program który nie chce się skompilować.
I mam pytanie czym można zastąpić GOTO i w jaki sposób??


C/C++
#include "console.ddt"
#include <iostream>
#include <conio.h>
int random( int nMin, int nMax ) { return rand() % nMax + nMin; }
using namespace std;
int main()
{
    poczatek:
    cout << "Witaj!\n";
    cout << "Wybierz dzialanie: \ndodawanie-1 \nodejmowanie-2\n";
    int dzialanie;
    cin >> dzialanie;
    switch( dzialanie )
    {
    case 1:
        goto dodawanie;
        break;
    case 2:
        goto odejmowanie;
        break;
    default:
        return 0;
        break;
    }
    dodawanie:
    int dobre_odpowiedzi = 0;
    int zle_odpowiedzi = 0;
    ddt::console::textcolor( 14 );
    cout << "\nPoziom 1 - Dodawanie\n";
    ddt::console::textcolor( 7 );
    srand( static_cast < unsigned int >( time( NULL ) ) );
    int licznik = 0;
    do
    {
        int liczba_1 = random( 0, 6 );
        int liczba_2 = random( 0, 6 );
        int liczba_3 = liczba_2 + liczba_1;
        int zmienna;
        cout << "Podaj wynik dzialania:" << liczba_1 << "+" << liczba_2 << "\n";
        cin >> zmienna;
       
        if( zmienna != liczba_3 )
        {
            ddt::console::textcolor( 12 );
            cout << "Zle\n";
            ddt::console::textcolor( 7 );
            licznik = licznik - 1;
            zle_odpowiedzi = zle_odpowiedzi + 1;
        }
        else
        {
            ddt::console::textcolor( 10 );
            cout << "Dobrze\n";
            ddt::console::textcolor( 7 );
            licznik = licznik + 1;
            dobre_odpowiedzi = dobre_odpowiedzi + 1;
        }
    } while( licznik <= 9 );
   
    cout << "Gratulacje!\n";
    ddt::console::textcolor( 10 );
    cout << "Ilosc dobrych odpowiedzi: " << dobre_odpowiedzi << "\n";
    ddt::console::textcolor( 12 );
    cout << "Ilosc zlych odpowiedzi: " << zle_odpowiedzi << "\n";
    ddt::console::textcolor( 7 );
    cout << "Dziekuje za gre!!!\n";
    cout << "Nacisnij dowolny przycisk aby wyjsc\n";
    getch();
    odejmowanie:
    int dobre_odpowiedzi = 0;
    int zle_odpowiedzi = 0;
    ddt::console::textcolor( 14 );
    cout << "Poziom 1 - Odejmowanie\n";
    ddt::console::textcolor( 7 );
    srand( static_cast < unsigned int >( time( NULL ) ) );
    int licznik = 0;
    do
    {
        int liczba_10 = random( 0, 6 );
        int liczba_11 = random( 0, 6 );
        if( liczba_11 >= liczba_10 )
             ddt::console::gotoxy( 142, 5 );
       
        int liczba_12 = liczba_10 - liczba_11;
        cout << "Podaj wynik dzialania:" << liczba_10 << "-" << liczba_11 << "\n";
        int zmienna;
        cin >> zmienna;
       
        if( zmienna != liczba_12 )
        {
            ddt::console::textcolor( 12 );
            cout << "Zle\n";
            ddt::console::textcolor( 7 );
            licznik = licznik - 1;
            zle_odpowiedzi = zle_odpowiedzi + 1;
        }
        else
        {
            ddt::console::textcolor( 10 );
            cout << "Dobrze\n";
            ddt::console::textcolor( 7 );
            licznik = licznik + 1;
            dobre_odpowiedzi = dobre_odpowiedzi + 1;
        }
        cout << "Gratulacje!\nNacisnij dowolny przycisk aby wyjsc\n";
        getch();
        return 0;
    }
P-1048
DejaVu
» 2008-07-23 19:08:01
Program Ci sie nie kompiluje bo:
1) Źle napisałeś druga pętlę do ... while (brak zakończenia)
2) Próbujesz zadeklarować 2 razy tą samą zmienną:
C/C++
int zmienna = 0;
//...
int zmienna = 0;
3) tworzysz zmienne po użyciu etykiet

C/C++
#include "console.ddt"
#include <iostream>
#include <conio.h>
int random( int nMin, int nMax ) { return rand() % nMax + nMin; }
using namespace std;

int main()
{
    int licznik, zle_odpowiedzi, dobre_odpowiedzi;
    poczatek:
    cout << "Witaj!\n";
    cout << "Wybierz dzialanie: \ndodawanie-1 \nodejmowanie-2\n";
    int dzialanie;
    cin >> dzialanie;
    switch( dzialanie )
    {
    case 1:
        goto dodawanie;
        break;
    case 2:
        goto odejmowanie;
        break;
    default:
        return 0;
        break;
    }
    dodawanie:
    dobre_odpowiedzi = 0;
    zle_odpowiedzi = 0;
    ddt::console::textcolor( 14 );
    cout << "\nPoziom 1 - Dodawanie\n";
    ddt::console::textcolor( 7 );
    srand( static_cast < unsigned int >( time( NULL ) ) );
    licznik = 0;
    do
    {
        int liczba_1 = random( 0, 6 );
        int liczba_2 = random( 0, 6 );
        int liczba_3 = liczba_2 + liczba_1;
        int zmienna;
        cout << "Podaj wynik dzialania:" << liczba_1 << "+" << liczba_2 << "\n";
        cin >> zmienna;
       
        if( zmienna != liczba_3 )
        {
            ddt::console::textcolor( 12 );
            cout << "Zle\n";
            ddt::console::textcolor( 7 );
            licznik = licznik - 1;
            zle_odpowiedzi = zle_odpowiedzi + 1;
        }
        else
        {
            ddt::console::textcolor( 10 );
            cout << "Dobrze\n";
            ddt::console::textcolor( 7 );
            licznik = licznik + 1;
            dobre_odpowiedzi = dobre_odpowiedzi + 1;
        }
    } while( licznik <= 9 );
   
    cout << "Gratulacje!\n";
    ddt::console::textcolor( 10 );
    cout << "Ilosc dobrych odpowiedzi: " << dobre_odpowiedzi << "\n";
    ddt::console::textcolor( 12 );
    cout << "Ilosc zlych odpowiedzi: " << zle_odpowiedzi << "\n";
    ddt::console::textcolor( 7 );
    cout << "Dziekuje za gre!!!\n";
    cout << "Nacisnij dowolny przycisk aby wyjsc\n";
    getch();
    odejmowanie:
    dobre_odpowiedzi = 0;
    zle_odpowiedzi = 0;
    ddt::console::textcolor( 14 );
    cout << "Poziom 1 - Odejmowanie\n";
    ddt::console::textcolor( 7 );
    srand( static_cast < unsigned int >( time( NULL ) ) );
    licznik = 0;
    do
    {
        int liczba_10 = random( 0, 6 );
        int liczba_11 = random( 0, 6 );
        if( liczba_11 >= liczba_10 )
             ddt::console::gotoxy( 142, 5 );
       
        int liczba_12 = liczba_10 - liczba_11;
        cout << "Podaj wynik dzialania:" << liczba_10 << "-" << liczba_11 << "\n";
        int zmienna;
        cin >> zmienna;
       
        if( zmienna != liczba_12 )
        {
            ddt::console::textcolor( 12 );
            cout << "Zle\n";
            ddt::console::textcolor( 7 );
            licznik = licznik - 1;
            zle_odpowiedzi = zle_odpowiedzi + 1;
        }
        else
        {
            ddt::console::textcolor( 10 );
            cout << "Dobrze\n";
            ddt::console::textcolor( 7 );
            licznik = licznik + 1;
            dobre_odpowiedzi = dobre_odpowiedzi + 1;
        }
    } while( licznik <= 9 );
   
    cout << "Gratulacje!\nNacisnij dowolny przycisk aby wyjsc\n";
    getch();
    return 0;
}

Powyższy kod się kompiluje. Nie używaj etykiet - zapomnij że istnieją. Korzystaj z funkcji i różnych pętli - są one dużo lepsze i możesz zapisać to samo nie używając instrukcji goto.
P-1049
sebastian380
Temat założony przez niniejszego użytkownika
Wielkie dzięki.
» 2008-07-24 12:52:52
Teraz już wiem o co chodzi.
P-1052
« 1 »
  Strona 1 z 1