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

Zagnieżdżanie menu błedy

Ostatnio zmodyfikowano 2012-01-29 21:51
Autor Wiadomość
adream
Temat założony przez niniejszego użytkownika
Zagnieżdżanie menu błedy
» 2012-01-29 13:06:25
Witam, mam dość głupi kłopot...
Najpierw robiłam elementy programu, a na sam koniec zostawiłam sobie menu.
Menu zrobiłam ostatecznie typowe przy pomocy do.. switch.. case.. break; jak to było w którymś kursie przy kalkulatorze. Chciałam je prosto wpisać w program w tym, że ok.. póki było jedno case było ok (prawie, bo przestał odbierać instrukcję zakończenia programu po kliknięciu "z"), gdy wpisałam kolejno case to wystąpił błąd kompilacji.
Nie wiem gdzie szukać błędu?
P-49737
SeaMonster131
» 2012-01-29 13:08:35
Podaj kod.
P-49738
adream
Temat założony przez niniejszego użytkownika
» 2012-01-29 13:16:13
Bardzo możliwe, że źle wpisuję. Ogólnie bez case 2,3,4,5 tam gdzie wpisałam kompiluje się.  

C/C++
#include <iostream>
#include <string>
#include <algorithm>
#include <iomanip>

using namespace std;
// struktura reprezentujaca gracza
struct player {
    std::string name, surname; // imie, nazwisko
    int wins, looses, draws, age, points; // zwyciestwa, przegrane, remisy, wiek, punkty
};

// funkcja pokazuje nam aktualny ranking graczy
void show_rank( player *, int );

// funkcja przydziela punkty graczom
void give_points( player *, player *, int, int );

int main() {
   
   
    cout << "MENU" << endl;
    cout << "[1] Start" << endl;
    cout << "[2] instrukcja 2" << endl;
    cout << "[3] instrukcja 3" << endl;
    cout << "[4] instrucja 4" << endl;
    cout << "[5] Koniec" << endl;
    int liczba;
    cout << "podaj liczbe, to nr opcji" << endl;
    cin >> liczba;
   
    do
    {
        switch( liczba )
        {
        case 1:
           
           
            char c;
            int n; // liczba graczy
            std::cout << "Liczba graczy: ";
            std::cin >> n;
            std::cin.get(); // usuwamy znak nowego wiersza pozostawiony po cin
           
            // alokacja pamieci dla tablicy z graczami
            player * players = new player[ n ];
           
            // petla do wprowadzania danych o graczach
            for( int i = 0; i < n; ++i ) {
                std::cout << "Gracz " << i + 1 << ": ";
                std::cin >> players[ i ].name >> players[ i ].surname >> players[ i ].age;
                players[ i ].wins = 0;
                players[ i ].looses = 0;
                players[ i ].draws = 0;
                players[ i ].points = 0; // gracze zaczynaja od 0
            }
           
            int counter = 1; // licznik rozgrywek
            for( int i = 0; i < n - 1; ++i ) {
                for( int j = i + 1; j < n; ++j, counter++ ) {
                    std::cout << "Rozgrywka nr " << counter << ": ";
                    std::cout << ' ' << players[ i ].name << ' ' << players[ i ].surname << " vs ";
                   
                    std::cout << ' ' << players[ j ].name << ' ' << players[ j ].surname << ": "; // pokaz graczy
                    // uzytkownik wprowadza liczbe punktow dla graczy
                    int first, second;
                    std::cin >> first >> second;
                    std::cin.get();
                   
                    // przydzielanie punktow
                    give_points( players + i, players + j, first, second );
                    show_rank( players, n ); // pokaz ranking
                   
                    if( j + 1 != n || i + 1 != n - 1 || n == 2 ) { // sprawdz czy to nie jest ostatnia  rozgrywka
                        if( n == 2 ) std::cout << "(Z)akoncz: ";
                        else std::cout << "(N)astepny,(Z)akoncz: ";
                       
                        std::cin.get( c );
                        switch( c ) {
                        case 'N':
                        case 'n':
                            continue;
                           
                        }
                    }
                }
                if( c == 'z' || c == 'Z' ) break; // z tej petli rowniez wyskocz
               
               
            }
           
            delete[] players; // usuwamy tablice z graczami z pamieci
           
           
            break;
           
        case 2:
            // instrukcja 2
            break;
        case 3:
            // instrukcja 3
            break;
           
        case 4:
            // instrukcja 4
            break;
        }
    } while( liczba != 0 || liczba != 5 );
   
    system( "PAUSE" );
   
   
    return 0;
}

// funkcja porownuje dwoch graczy na podstawie ilosci punktow
bool playergt( player a, player b ) {
    return a.points > b.points;
}

void show_rank( player * ps, int n ) {
    // nowa tablica dla rankingu
    player * p = new player[ n ];
   
    // kopiuj tablice
    for( int i = 0; i < n; ++i ) {
        p[ i ] = ps[ i ];
    }
   
    std::sort( p, p + n, playergt ); // funkcja sortujaca z algorytmow STL
   
    std::cout << "======== RANKING ==========\n\n";
    std::cout << " MIEJSCE  GRACZ\t\t\t\tPUNKTY WYGRANE PRZEGRANE REMISY\n";
    for( int i = 0; i < n; ++i ) {
        std::cout << "   " << i + 1 << std::setw( 6 ) << " ";
        std::cout << std::left << std::setw( 32 ) << p[ i ].name + ' ' + p[ i ].surname;
        std::cout << std::setw( 7 ) << p[ i ].points;
        std::cout << std::setw( 10 ) << p[ i ].wins;
        std::cout << std::setw( 10 ) << p[ i ].looses;
        std::cout << std::setw( 4 ) << p[ i ].draws;
        std::cout.put( '\n' );
        ;
    }
   
    delete[] p;
}

void give_points( player * a, player * b, int first, int second ) {
    if( first > second ) { // wygrywa pierwszt
        a->points += 2; // dodamy dwa punkty za wygrana
        a->wins += 1; // pierszy wygrywa
        b->looses += 1; // drugi przegrywa
    } else if( first == second ) {
        a->points += 1; // remis po jednym punkcie
        b->points += 1;
        a->draws += 1;
        b->draws += 1;
    } else { // wygrywa drugi
        b->points += 2;
        b->wins += 1; // drugi wygrywa
        a->looses += 1; // a pierwszy przegrywa
    }
}
P-49739
m4tx
» 2012-01-29 13:41:36
Definiujesz zmienne w case. Zrób tak:
C/C++
case 1: {
    //blabla...
    break;
}

case 2: {
    //blabla...
    break;
}

//itp.
P-49743
adream
Temat założony przez niniejszego użytkownika
» 2012-01-29 13:49:16
dziękuję bardzo, działa .
A jeszcze widzisz może co mam źle z zamykaniem programu? po rozstrzygnięciu rozgrywki wraca znów do liczby graczy... ;/ nie wiem czy źle myślę..
P-49744
adream
Temat założony przez niniejszego użytkownika
» 2012-01-29 20:49:50
Jeszcze jedno.. Jak chcę by po wykonaniu każdej opcji wrócił program do menu... to w moim przypadku jak? Zrobić jeszcze jedno do while i wpakować całe menu wraz z tym drugim do while? I w sumie nie bardzo mam pomysł jak dalej.. Z góry dziękuję za wszelkie podpowiedzi/odp.
P-49789
jsc
» 2012-01-29 21:51:05
Tak.

A żeby to uprościć radzę się zastanowić co możesz zamknąć w funkcjach,
P-49790
« 1 »
  Strona 1 z 1