program źle liczy

0

Cześć. Napisałem taki program:

#include <iostream>
#include <cstdlib>
#include <time.h>

using namespace std;
string wait;
int konto=0, menu, select, random_number1, random_number2, random_number3, los1, los2, los3, gotowe1=0, gotowe2=0, gotowe3=0;
int main()
{
    srand(time(NULL));
    random_number1 = rand()%100;
    random_number2 = rand()%1000;
    random_number3 = rand()%100000;
    cout << "Exacler" << endl;
        while(menu!=1)
    {
    cout << endl;
    cout << "1.START" << endl;
    cout << "2.POMOC" << endl;
    cout << "3.O PROGRAMIE" << endl;
    cout << "->";
    cin >> menu;
    switch(menu)
    {
    case 2:
        cout << "Celem gry jest uzbieranie kwoty wygenerowanej przez program." << endl;
        cout << "Nie moze byc mniejsza ani wyzsza!" << endl;
        break;
    case 3:
        cout << "Autor:Mateusz Wolarz" << endl;
        cout << "Uzyty kompilator:CodeBlocks" << endl;
        cout << "Napisany na potrzeby:Wlasne" << endl;
        cout << "Stopien dostepnosci:Prywatny" << endl;
        cout << "Udostepniony:Nie" << endl;
        break;
    }
    }
    cout << "Uzbieraj:" << random_number1 << " ," << random_number2 << " ," << random_number3 << endl;
    while((gotowe1!=1)&&(gotowe2!=1)&&(gotowe3!=1))
    {
    if (gotowe1=1)
    {
        cout << "1=Gotowe"<<endl;
    }
    if (gotowe2=1)
    {
        cout << "2=Gotowe"<<endl;
    }
    if (gotowe3=1)
    {
        cout << "3=Gotowe"<<endl;
    }
    los1 = rand()%10+1;
    los2 = rand()%100+1;
    los3 = rand()%1000+1;
    cout << "1." << los1 <<endl;
    cout << "2." << los2 <<endl;
    cout << "3." << los3 <<endl;
    cout << endl;
    cout << "1(1,2,3).PLUS" << endl;
    cout << "2(1,2,3).MINUS" << endl;
    cout << "->";
    cin >> select;
    switch(select)
    {
    case 11:
        konto = konto + los1;
        cout << "Twoje konto:" << konto << endl;
        break;
    case 12:
        konto = konto + los2;
        cout << "Twoje konto:" << konto << endl;
        break;
    case 13:
        konto = konto + los3;
        cout << "Twoje konto:" << konto << endl;
        break;
    case 21:
        konto = konto - los1;
        cout << "Twoje konto:" << konto << endl;
        break;
    case 22:
        konto = konto - los2;
        cout << "Twoje konto:" << konto << endl;
        break;
    case 23:
        konto = konto - los3;
        cout << "Twoje konto:" << konto << endl;
        break;
    }
    cout << "Uzbieraj:" << random_number1 << " ," << random_number2 << " ," << random_number3 << endl;
    if(konto=los1)
    {
        gotowe1 = 1;
    }
    if(konto=los2)
    {
        gotowe2 = 1;
    }
    if(konto=los3)
    {
        gotowe3 = 1;
    }
    }
    return 0;
}
 

Brakuje jeszcze zliczania prób ale raczej program jest gotowy. Z tym że jak widać linie kodu odpowiedzialne za GOTOWE=1 itd. Już na samym początku działania programu, nie wiem czemu przyjmuje że wszystkie zmienne o nazwie gotowe(1,2,3) są równe 1. Tak być nie powinno. To samo tyczy się funkcji While. O to cu chodzi?

1

zmień każdego

 if(konto = los1)

na

  if(konto == los1)

I zmień to

 while((gotowe1!=1)||(gotowe2!=1)||(gotowe3!=1))
0

Może to pomogło z jakimś problemem ale na pewno nie z tym który sprawia że na samym początku wartość gotowe pokazuje 1
chodzi mi o linie 41-49.
poza tym po wprowadzeniu pierwszych danych. Program kończy prace. Powinien ją zakończyć dopiero gry uzbiera się wszystkie 3 sumy!

0

Zmień if(gotowe=1) na if(gotowe==1)

0

Zmień te 3 if w których przypisujejsz wartość jeden do gotowe1,2,3 na gotowe1==!1 itp dlatego sprawdza ci tylko raz bo warunek zostane spełniony po przypisaniu wartosci

2
  1. Code::Blocks nie jest kompilatorem, a środowiskiem. Kompilatorem jest GCC.
  2. = to operator przypisania, a == - porównania.
  3. Sformatuj ten kod porządnie, inaczej nic nie wiadomo.
1
  1. Nie używaj zmiennych globalnych, bokiem ci to wyjdzie
  2. Zacznij używać tablic
  3. Masz tylko jedno konto zaś uzbierać masz 3 wartości? Trochę dziwaczne.
    Uwzględniając powyższe da się program znacznie skrócić:
#include <iostream>
#include <cstdlib>
#include <ctime> 
using namespace std;

int main()
  {
   srand(time(0));
   unsigned mod[3]={10,100,1000},goal[3];
   while(true)
     {
      cout<<"1. START\n2. POMOC\n3. O PROGRAMIE\n0. Koniec programu\nTwoj wybor: ";
      unsigned menu;
      cin>>menu;
      while(cin.get()!='\n') {}
      switch(menu)
        {
         case 0: return 0;
         case 1: break;
         case 2: cout<<"Celem gry jest uzbieranie kwoty wygenerowanej przez program.\nNie moze byc mniejsza ani wyzsza!\n"<<endl; continue;
         case 3: cout<<"Autor: ...\n....\n....\n"<<endl; continue;         
         default: cout<<"Nie ma takiej opcji\n"<<endl; continue;
        }
      unsigned account=0,done=0;
      for(unsigned i=0;i<3;++i) goal[i]=rand()%(10*mod[i]);
      while(done!=7)
        {
         unsigned add[3];
         cout<<"Masz: "<<account<<"\nUzbieraj:";
         for(unsigned i=0;i<3;++i) cout<<' '<<goal[i];
         for(unsigned i=0;i<3;++i) add[i]=rand()%mod[i];
         for(unsigned i=0;i<3;++i) cout<<"\n"<<(i+1)<<". "<<add[i];
         cout<<"\n1(1,2,3).PLUS\n2(1,2,3).MINUS\nTwoj wybor: ";
         unsigned select;
         cin>>select;
         while(cin.get()!='\n') {}
         unsigned sign=select/10,idx=select%10;
         if((1<=sign)&&(sign<=2)&&(1<=idx)&&(idx<=3))
           {
            account+=(3-2*sign)*add[idx-1];
            for(unsigned i=0;i<3;++i) if(account==goal[i]) done|=(1<<i);
           }
         else cout<<"Nie ma takiej opcji\n"<<endl;
        }
     }
   return 0;
  }
0

I just writting since really recently hommie.

2

Za dużo się dzieje w funkcji main, podziel to na mniejsze funkcje1
Użyj debuggera, to jest podstawowe narzędzie, którego umiejętność obsługiwania jest niezbędna, a nawet pomaga w nauce podstaw programowania! Jakbyś to zrobił szybko byś znalazł błąd opisany przez Patryk27

1 użytkowników online, w tym zalogowanych: 0, gości: 1