Koło fortuny - wytłumaczenie gdzie dokładnie jest błąd w funkcji.

0
 void kat()
{
    srand(time(0));
    k = 0 + rand() % (9 - 0 + 1);
    cout << "KATEGORIA: " << kategoria[k] << endl;
    if (kategoria[k] = "miejsce") 
    { 
        h = 0 + rand() % (3 - 0 + 1);
        miejsce[h] = haslo;
    } else if (kategoria[k] = "przyslowie")
        {    
            h = 0 + rand() % (3 - 0 + 1);
            przyslowie[h] = haslo;
        } else if (kategoria[k] = "cytat")
            {
                h = 0 + rand() % (2 - 0 + 1);
                cytat[h] = haslo;
            } else if (kategoria[k] = "osoba")
                {
                    h = 0 + rand() % (3 - 0 + 1);
                    osoba[h] = haslo;
                } else if (kategoria[k] = "tytul")
                    {
                        h = 0 + rand() % (3 - 0 + 1);
                        tytul[h] = haslo;
                    } else if (kategoria[k] = "rzecz")
                        {
                            h = 0 + rand() % (3 - 0 + 1);
                            rzecz[h] = haslo;
                        } else if (kategoria[k] = "czynnosc")
                            {
                                h = 0 + rand() % (3 - 0 + 1);
                                czynnosc[h] = haslo;
                            } else if (kategoria[k] = "postac")
                                {
                                    h = 0 + rand() % (3 - 0 + 1);
                                    postac[h] = haslo;
                                } else if (kategoria[k] = "miasto")
                                    {
                                        h = 0 + rand() % (3 - 0 + 1);
                                        miasto[h] = haslo;
                                    } else break;
for( size_t i = 0; i < haslo.size(); i++ ) 
    {
    if( haslo[ i ] == ' ' )
         haslo_h += ' ';
    else
         haslo_h += '*';
    }
                            
}

C:\Users...\projekt.cpp30: error: could not convert
'kategoria[k].std::basic_string<_CharT, _Traits,
_Alloc>::operator=<char, std::char_traits<char>,
std::allocator<char> >(((const char*)"miejsce"))' from
'std::basic_string<char>' to 'bool'
C:\Users...\projekt.cpp40:
error: could not convert 'kategoria[k].std::basic_string<_CharT,
_Traits, _Alloc>::operator=<char, std::char_traits<char>,
std::allocator<char> >(((const char*)"przyslowie"))' from
'std::basic_string<char>' to 'bool'

C:\Users...\projekt.cpp36:
error: could not convert 'kategoria[k].std::basic_string<_CharT,
_Traits, _Alloc>::operator=<char, std::char_traits<char>,
std::allocator<char> >(((const char*)"cytat"))' from
'std::basic_string<char>' to 'bool'

C:\Users...\projekt.cpp37:
error: could not convert 'kategoria[k].std::basic_string<_CharT,
_Traits, _Alloc>::operator=<char, std::char_traits<char>,
std::allocator<char> >(((const char*)"osoba"))' from
'std::basic_string<char>' to 'bool'

C:\Users...\projekt.cpp38:
error: could not convert 'kategoria[k].std::basic_string<_CharT,
_Traits, _Alloc>::operator=<char, std::char_traits<char>,
std::allocator<char> >(((const char*)"tytul"))' from
'std::basic_string<char>' to 'bool'

C:\Users...\projekt.cpp39:
error: could not convert 'kategoria[k].std::basic_string<_CharT,
_Traits, _Alloc>::operator=<char, std::char_traits<char>,
std::allocator<char> >(((const char*)"rzecz"))' from
'std::basic_string<char>' to 'bool'

C:\Users...\projekt.cpp43:
error: could not convert 'kategoria[k].std::basic_string<_CharT,
_Traits, _Alloc>::operator=<char, std::char_traits<char>,
std::allocator<char> >(((const char*)"czynnosc"))' from
'std::basic_string<char>' to 'bool'

C:\Users...\projekt.cpp42:
error: could not convert 'kategoria[k].std::basic_string<_CharT,
_Traits, _Alloc>::operator=<char, std::char_traits<char>,
std::allocator<char> >(((const char*)"postac"))' from
'std::basic_string<char>' to 'bool'

C:\Users...\projekt.cpp43:
error: could not convert 'kategoria[k].std::basic_string<_CharT,
_Traits, _Alloc>::operator=<char, std::char_traits<char>,
std::allocator<char> >(((const char*)"miasto"))' from
'std::basic_string<char>' to 'bool'

C:\Users...\projekt.cpp17: error: break statement not within loop or switch

wiem, że break jest trochę bez sensu... ale czy mógłby mi ktoś wyjaśnić dokładnie gdzie robię bład w tej funkcji?

0

porównywanie to operator ==
operator = to przypisanie wartości.
Wywal całość, zacznij od nowa.

0

ok. do tego doszedłem, ale program nadal nie wyświetla mi hasła "zasłoniętego" gwiazdkami.
co powinienem zrobić?

0

Powinieneś zacząć używać głowy:

        h = 0 + rand() % (3 - 0 + 1); // tu się spodziewasz że zmieni się h
        miejsce[h] = haslo; // zaś tu się spodziewasz że zmieni się haslo?
0

założenia były takie :
program najpierw losuje liczbę, która jest indeksem tablicy w której mam zapisane kategorie hasła,
następnie w zależności od wylosowanej kategorii chcę losować indeks tabeli w której są wczytane hasła z danej kategorii...
nie ogarniam za dobrze c++ i nie potrafię znaleźć błędu, choć zapewne jest on dość banalny, możesz mi podpowiedzieć trochę jaśniej, co powinienem poprawić? byłbym wdzięczny ;)

0

Co tu nie jasnego? W którą stronę wg ciebie przypisuje operator = ?
np: a=b;

0

czyli powinienem zrobić:

    if (kategoria[k] == "miejsce") 
    { 
        h = 0 + rand() % (3 - 0 + 1);
        miejsce[h] == haslo;
    }

??

0

poprawiłem to właśnie w taki sposób jak wcześniej napisałem... program działa ok do momentu wyświetlenia kategorii hasła. dalej miał wyświetlać w postaci ciągu "*" hasło jednak tak się nie dzieję... nie mam już żadnej koncepcji co do tego, gdzie leży błąd... bardzo proszę o pomoc.

0

miejsce[h] == haslo; - co to wg ciebie ma zrobić?

0

kurcze.. to miało podstawić wartość wczytaną z tablicy haseł pod zmienną "hasło"... sam nie wiem do końca, czy powinien być tam =, czy == :/
możliwe, że coś źle kombinuję... ale staram się analizować, to co jest na forum z tym co wiem... wynika chyba z tego, że nie wiem za wiele... a to źle...
cały program mam zrobiony, dopiero przy tym string'u natknąłem się na komplikacje (zapewne wynika to z tego, że pierwszy raz korzystam ze string'a).. do skończenia tego programu brakuje mi tylko funkcji, która będzie odpowiedzialna za hasło i za wszystkie operacje z nim związane :/
podpowiedz mi czy kombinuję z tym w dobrą stronę (coś nie tak z operatorem), czy po prostu cała funkcja jest do d**y?

0

Może rozważ zmianę studiów na dziennikarstwo:

#include <ctime>
#include <cstdlib>
#include <cstring>
#include <iostream>
using namespace std;

const char *miejsce="miejsce";
const char *miasto="miasto";

struct DATA { const char *kategoria,*haslo; } TB[]=
  {
    {miejsce,"polska"},
    {miejsce,"kanada"},
    {miasto,"warszawa"},
    {miasto,"krakow"},
  };

void aster(char *haslo)
  {
   for(;*haslo;++haslo) if(*haslo!=' ') *haslo='*';
  }

bool change(char *haslo,const char *wzor,char znak)
  {
   char ret=0;
   for(;*haslo;++haslo,++wzor) if(*wzor==znak) *haslo=ret=znak;
   return ret;
  }

int main()
  {
   srand(time(0));
   for(;;)
     {
      int p=rand()%(sizeof(TB)/sizeof(TB));
      cout<<"Kategoria: "<<TB[p].kategoria<<endl;
      char haslo[128];
      strcpy(haslo,TB[p].haslo);
      aster(haslo);
      while(strcmp(haslo,TB[p].haslo))
        {
         cout<<haslo<<" : ";
         if(change(haslo,TB[p].haslo,cin.get())) cout<<"OK"<<endl<<endl;
         else cout<<"Niestety"<<endl<<endl;
         while(cin.get()!='\n');
        }
      cout<<"Bardzo dobrze. Naciesnij Enter";
      while(cin.get()!='\n');
     }
   return 0;
  }
0

aż tak radykalnych kroków jak pójście na dziennikarstwo nie będę rozważał... elektronika i telekomunikacja odpowiada mi w 95% (powiedzmy, że te 5% stanowi programowanie, które tak średni ogarniam) :p
bardzo mi pomogłeś, wielkie dzięki, co prawda muszę jeszcze z tym pokombinować, ale z tym sobie już raczej poradzę
jeszcze raz bardzo wielkie dzięki! ;)

0

@dott94 to mam dla ciebie złą wiadomość bo większość ludzi po EiT pracuje programując (czasami w matlabie czy vhdlu, ale mimo wszystko).

0

Na który roku jestes ziomek?

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