2016-03-20 14 views
0

numaralı telefonunda olduğunu görmek için okul için bir asmaca oyunu hazırlıyorum. Tahmin edilecek kelimeler bir veri dosyasından çekilir, programın son kelimesini oyun için kullanılacak kelime olarak seçer, 'words' bu değişken için kullanıyorum, oyun devam eder , kullanıcı bir mektubu tahmin eder ve eğer mektubun sözcüğü doğruysa ve yanlışsa ve program bir "tahta" ya da cellatın resmini kademeli olarak gösterirse. aşağıdaki gibi str.find() ile belirli bir harfin

ben tahmin harf kelimenin olup olmadığını görmek için str.find() kullanılan kod şudur:

while (wrongGuess < 7){ 
    cout << "\nGuess a letter in the word: " << endl; 
    cin >> guess; 

    if (words.find(guess)==true){ 
     cout << "Correct! " << guess << " is FOUND in the word " << word << endl; 
     continue;} 
    else 
     {cout << guess << " is NOT FOUND in the word " << endl; 
     wrongGuess++; 
     if(wrongGuess == 1) 
      cout << board2; 
     else if(wrongGuess == 2) 
      cout << board3; 
     else if(wrongGuess == 3) 
      cout << board4; 
     else if(wrongGuess == 4) 
      cout << board5; 
     else if(wrongGuess == 5) 
      cout << board6; 
     else if(wrongGuess == 6) 
      cout << board7 << "\nSorry Game Over"; 
     } 

kullanılan kelime programming olduğunu.

Sorunum bazen doğru bir harf girdiğimde (r gibi) doğru olduğumu söylüyor, diğer zamanlarda farklı bir doğru harfi giriyorum (p) ve program bana yanlış olduğumu söylüyor.

Neyin var yanlış?

+0

'words.find (tahmin) == TRUE - doğru/yanlış ... –

+0

Ayrıca "dize STL kapsayıcı" arayüzünü kullanmayı düşünün (std ile döner pozisyon değil bulmak :: ancak dize :: işlev yerine üye bul; Bu arayüz, string'in üye fonksiyonlarının çalkantısından ziyade, dilin geri kalanıyla daha tutarlıdır. –

cevap

1

std::basic_string::find aka. std::string::find, belirtilen karakterin konumunu bool değil, dizgede döndürür.

Gönderdiğiniz kod bazen çalışıyor çünkü true1 için bozuluyor ve aranan karakter 1 konumundaysa, koşul doğrudur.

düzeltmek için, bu yapmalıdır:

... 
if (words.find(guess)!=std::string::npos){ 
    ... 

std::basic_string::find

1

Kullanım std::string::nposfind sonucu inci kontrol etmek.

if(words.find(guess) != std::string::npos) 
{ 
    //... 
} 
else 
{ 
} 
İlgili konular