Autor Wątek: Program się kompiluje, lecz źle wykonuje działania  (Przeczytany 961 razy)

Offline Vae

  • Użytkownik

# Wrzesień 04, 2011, 13:16:32
#include <iostream>
#include <cstdlib>
using namespace std;
int pz = 10;
int zloto = 300;
int main()
{
    /*Po jakiejś tam funkcji pz = pz - 10; (100-10=90)*/
    pz = 90;
    short kosciol;
    int k1=100-pz; int k2=(100-pz)/2; int k3=(100-pz)/5; int k4=(100-pz)/10; int k5=(100-pz)/20;
    do
    {
        system("cls");
        cout << "W imi\251 Ojca (...)" << endl
        << "Tutaj, sk\210adaj\245c ja\210mu\276n\251, mo\276esz odzyska\206 si\210y i zdrowie." << endl << endl
        << "1) " << k1 << " P\276 (" << k1*3 << " z\210ota)" << endl
        << "2) " << k2 << " P\276 (" << k2*3 << " z\210ota)" << endl
        << "3) " << k3 << " P\276 (" << k3*3 << " z\210ota)" << endl
        << "4) " << k4 << " P\276 (" << k4*3 << " z\210ota)" << endl
        << "5) " << k5 << " P\276 (" << k5*3 << " z\210ota)" << endl
        << "6) Rezygnuj" << endl << endl
        << "Tw\242j poziom \276ycia: " << pz << endl
        << "Tw\242j maj\245tek: " << zloto << endl << endl
        << "Wprowad\253 odpowiedni\245 liczb\251: ";
        cin >> kosciol;
        switch(kosciol)
        {
            case 1: if(zloto>k1*3){pz+=k1;zloto=zloto-k1*3;}else{system("cls");cout<<"Nie sta\206 Ci\251 na ja\210mu\276n\251!"<<endl;system("pause");break;}
            case 2: if(zloto>k2*3){pz+=k2;zloto=zloto-k2*3;}else{system("cls");cout<<"Nie sta\206 Ci\251 na ja\210mu\276n\251!"<<endl;system("pause");break;}
            case 3: if(zloto>k3*3){pz+=k3;zloto=zloto-k3*3;}else{system("cls");cout<<"Nie sta\206 Ci\251 na ja\210mu\276n\251!"<<endl;system("pause");break;}
            case 4: if(zloto>k4*3){pz+=k4;zloto=zloto-k4*3;}else{system("cls");cout<<"Nie sta\206 Ci\251 na ja\210mu\276n\251!"<<endl;system("pause");break;}
            case 5: if(zloto>k5*3){pz+=k5;zloto=zloto-k5*3;}else{system("cls");cout<<"Nie sta\206 Ci\251 na ja\210mu\276n\251!"<<endl;system("pause");break;}
        }
    }while(kosciol!=6);
}

Jest to jedna z funkcji mojego programu (pseudogierki ;D). W menu widać, że wszystkie działania się pięknie wykonują, lecz po złożeniu 'jałmużny' oprócz tego, że pieniądze się odejmują, dochodzą nieprawidłowe wyniki z punktów życia (pz). Jestem w tym trochę zielony, ale już się trochę nad tym głowiłem i żadnego problemu sam nie znalazłem. Wiem, że może capić amatorszczyzną, w tym też możecie mnie ocenić. Liczę na Waszą pomoc.
PS. Nie wiem, czy napisałem w dobrej kategorii, dodajcie kategorię problemy ;). Jeśli coś nie tak w tej sprawie to proszę o przeniesienie.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline dikamilo

  • Użytkownik
    • blog

# Wrzesień 04, 2011, 13:28:00
Debuggera nie masz ? Uruchamiasz krokowo i sprawdzasz gdzie są błędy.

Offline stasiu96

  • Użytkownik

# Wrzesień 04, 2011, 13:37:36
Błąd leży w instrukcji switch. Nawias klamrowy musisz zamykać przed break. A tak przy okazji zmienne k1, k2 itd. obliczaj w pętli do, bo inaczej punkty życia mogą przekroczyć 100.

Offline Vae

  • Użytkownik

# Wrzesień 04, 2011, 15:04:44
Podziękowania Wam obu, zwłaszcza Stasiowi. ;). To był chyba najgłupszy błąd jaki zrobiłem. ;P.

Offline Oti

  • Użytkownik

# Wrzesień 04, 2011, 15:30:24
Jak będziesz w ten sposób pisać kod, to takie błędy będziesz miał co i rusz. Nie po to bozia stworzyła klawisz enter, żebyś ty wszystko pisał w jednej linijce. Rozumiem, jakieś proste instrukcje można zapisywać w ten sposób. Ale nie takie tasiemcowe konstrukcje if-else. Pozdrawiam.