• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wykonywanie pętli while

VPS Starter Arubacloud
0 głosów
283 wizyt
pytanie zadane 3 kwietnia 2018 w C i C++ przez xLooks Początkujący (250 p.)

Witam, tworzę sobie prostą grę wisielca w c++ i mam problem z tym fragmentem kodu.

int znaleziono=0;
    while (znaleziono!=-1)
    {

        znaleziono=wylosowany_wyraz.find(litera);
        cout<<"Pozycja znaleziono: "<<znaleziono<<endl;

        if (znaleziono!=-1)
        {
            wylosowany_wyraz[znaleziono]='0';
            obecny_wyglad[znaleziono]=litera;
        }
        else if(znaleziono!=-1)
        {

            cout<<"\nLitery " <<litera<<" nie ma w slowie";
        }
    }

Problem polega na tym,że pętla(potrzebuję pętli ponieważ w jednym wyrazie może występować kilka tych samych liter, przez co później pierwszą znalezioną zastępuję znakiem 0 i szukam dalej) zawsze kończy się ze zmienną znaleziono=-1(zwracany NPOS w find), przez co za każdym razem, wyskakuje komunikat,że danej litery nie ma w słowie. Jak sobie poradzić z tym problemem. Proszę o pomoc :) 

komentarz 3 kwietnia 2018 przez Aisekai Nałogowiec (42,190 p.)
Nie sądzisz, że warunki w if i else-if razem są kompletnie bezsensu?

1 odpowiedź

+1 głos
odpowiedź 3 kwietnia 2018 przez j23 Mędrzec (195,220 p.)
wybrane 3 kwietnia 2018 przez xLooks
 
Najlepsza

zawsze kończy się ze zmienną znaleziono=-1(zwracany NPOS w find)

Co tam robią te -1, jeśli wiesz, że find zwraca wartość std::string::npos w razie nieznalezienia szukanej litery?

 

Tak zrób:

    int pos = 0;
    bool znaleziono = false;
    
    while ((pos = wylosowany_wyraz.find(litera, pos)) != std::string::npos)
    {
        cout << "Pozycja znaleziono: " << pos << '\n';
 
        wylosowany_wyraz[pos] = '0';
        obecny_wyglad[pos] = litera;
    
        znaleziono = true;
    }
    
    if(!znaleziono) 
        cout << "\nLitery " << litera << " nie ma w slowie";

 

komentarz 3 kwietnia 2018 przez xLooks Początkujący (250 p.)
Dziękuję za pomoc, a co do tego -1, to npos u mnie nie działa i znalazłem,że npos=-1
komentarz 3 kwietnia 2018 przez j23 Mędrzec (195,220 p.)

Musi działać, tylko powinieneś pamiętać, że wartość ta zdefiniowana jest wewnątrz klasy std::string, więc powinieneś odwoływać się do niej tak, jak pokazałem w kodzie.

Podobne pytania

0 głosów
1 odpowiedź 286 wizyt
0 głosów
2 odpowiedzi 547 wizyt
pytanie zadane 26 stycznia 2017 w C i C++ przez Śwież4k Bywalec (2,570 p.)
0 głosów
0 odpowiedzi 159 wizyt
pytanie zadane 30 grudnia 2015 w PHP przez Kumalski97 Nowicjusz (120 p.)

92,762 zapytań

141,686 odpowiedzi

320,499 komentarzy

62,106 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...