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? |
|
SeaMonster131 |
» 2012-01-29 13:08:35 Podaj kod. |
|
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ę. #include <iostream> #include <string> #include <algorithm> #include <iomanip>
using namespace std;
struct player { std::string name, surname; int wins, looses, draws, age, points; };
void show_rank( player *, int );
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; std::cout << "Liczba graczy: "; std::cin >> n; std::cin.get(); player * players = new player[ n ]; 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; } int counter = 1; 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 << ": "; int first, second; std::cin >> first >> second; std::cin.get(); give_points( players + i, players + j, first, second ); show_rank( players, n ); if( j + 1 != n || i + 1 != n - 1 || n == 2 ) { 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; } delete[] players; break; case 2: break; case 3: break; case 4: break; } } while( liczba != 0 || liczba != 5 ); system( "PAUSE" ); return 0; }
bool playergt( player a, player b ) { return a.points > b.points; }
void show_rank( player * ps, int n ) { player * p = new player[ n ]; for( int i = 0; i < n; ++i ) { p[ i ] = ps[ i ]; } std::sort( p, p + n, playergt ); 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 ) { a->points += 2; a->wins += 1; b->looses += 1; } else if( first == second ) { a->points += 1; b->points += 1; a->draws += 1; b->draws += 1; } else { b->points += 2; b->wins += 1; a->looses += 1; } }
|
|
m4tx |
» 2012-01-29 13:41:36 Definiujesz zmienne w case. Zrób tak: case 1: { break; }
case 2: { break; }
|
|
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ę.. |
|
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. |
|
jsc |
» 2012-01-29 21:51:05 Tak.
A żeby to uprościć radzę się zastanowić co możesz zamknąć w funkcjach, |
|
« 1 » |