[c++] Zawieszanie się programu przy wpisaniu niektórych liczb.
Ostatnio zmodyfikowano 2014-01-28 18:34
Asvarox93 Temat założony przez niniejszego użytkownika |
[c++] Zawieszanie się programu przy wpisaniu niektórych liczb. » 2014-01-28 16:51:02 Witam! Jestem tutaj nowy i od jakiegoś czasu zacząłem się uczyć c++. Napisałem tutaj program, takiego jakby bankomatu, ale jest w nim pewien problem, którego nie mogę ogarnąć. Chodzi o to, że po zalogowaniu się i wybraniu opcji wypłata środków podajemy w polu kwotę jaką chcemy wypłacić. Jednak gdy wpiszemy tam np. 550 czy 989 to program jakby przestaje działać, zawiesza się w miejscu i nie rusza. Z innymi liczbami np. 253 sobie radzi. Jak zniwelować to zawieszanie? O to kod: #include <iostream> using namespace std;
int wybor = 1; int stankonta = 1000; int haslo = 12345; int login = 55522;
void menu( int ); int wyplata(); int przelew(); int haslox(); int loginx(); int main() { int ohaslo; int ologin; while( wybor != 0 ) { ologin = loginx(); ohaslo = haslox(); if( ohaslo == haslo && ologin == login ) { while( wybor != 0 ) { menu( wybor ); } } else { cout << "Zły login lub hasło." << endl << endl; } } cout << "Milego dnia\n"; system( "pause" ); } void menu( int ) { cout << " 1.Sprawdzanie stanu konta \n 2.Wypłata pieniedzy \n 3.Przelew\n 0.Koniec\n"; cin >> wybor; switch( wybor ) { case 1: cout << "Na twoim koncie znajduje sie: " << stankonta << endl; break; case 2: wyplata(); break; case 3: przelew(); break; case 0: break; default: cout << "Została wybrana zła opcja, prosze wybrac inna\n"; break; } } int wyplata() { int tablica[] = { 1, 2, 5, 10, 20, 50, 100, 200 }; int tablicax[] = { 5, 10, 5, 10, 5, 5, 3, 1 }; int n = 7; int x; int reszta; cout << "Prosze podac kwote jaka ma zostac wyplacona: "; cin >> reszta; x = reszta; if( stankonta >= reszta ) { while( n >= 0 ) { while( reszta >= tablica[ n ] ) { if( tablicax[ n ] > 0 ) { reszta = reszta - tablica[ n ]; tablicax[ n ] = tablicax[ n ] - 1; } } n--; } stankonta = stankonta - x; } else { cout << "Brak srodków na koncie" << endl; } cout << "stan konta: " << stankonta << endl; cout << "Zostało nominałów w bankomacie : " << endl; for( int y = 7; y >= 0; y-- ) { cout << tablica[ y ] << "zl = " << tablicax[ y ] << endl; } return 0; } int przelew() { int reszta; cout << "Prosze podac kwote jaka ma zostac przelana: "; cin >> reszta; if( stankonta >= reszta ) { stankonta = stankonta - reszta; } else { cout << "Brak srodkow na koncie" << endl; } cout << "stan konta po przelewie: " << stankonta << endl; return 0; } int haslox() { int sHaslo = 0; cout << "Podaj haslo konta: " << endl; cin >> sHaslo; cout << endl << endl; return sHaslo; }
int loginx() { int sHaslo = 0; cout << "Podaj login konta: " << endl; cin >> sHaslo; return sHaslo; } Domyślam się, że optymalizacja leży i kwiczy, ale jak już mówiłem to moje początki:). |
|
leon_w |
» 2014-01-28 17:03:19 while( reszta >= tablica[ n ] ) { if( tablicax[ n ] > 0 ) { reszta = reszta - tablica[ n ]; tablicax[ n ] = tablicax[ n ] - 1; } }
|
Myślę, że problem może być tutaj. Masz tylko jeden banknot 200-stu złotowy. Jeżeli wypłacasz więcej niż 199, to pętla: while( reszta >= tablica[ n ] ) { if( tablicax[ n ] > 0 ) { reszta = reszta - tablica[ n ]; tablicax[ n ] = tablicax[ n ] - 1; } }
|
wykona się dwa razy, ale już za drugim razem nie będzie banknotu 200 zł, więc if nie jest spełniony, ale pętla nadal się wykonuje. W tym miejscu pewnie się zawiesza. |
|
Asvarox93 Temat założony przez niniejszego użytkownika |
» 2014-01-28 18:34:37 Okey, dzięki za pomoc:). Problem został rozwiązany. Kto by pomyślał, że wystarczyło jednego else dodać:). |
|
« 1 » |