2012-03-15 1 views
0

のforループとif文で何らかの理由でif文が互いに逆であっても、なぜそれが実行されているのかわかりません。私はさまざまな方法で試しましたが、それでも同じように出てきます。のハングマンプログラムの問題

#include <stdio.h> 
#include <stdlib.h> 



int main() 
{ 
char secretword[20] = {}; 
char alphabet[28] = {"abcdefghijklmnopqrstuvwxyz "}; 
char guess[2] = {}; 
int i = 0, k = 0; 
int seclength = 0, alphlength = 0; 
int GuessCtr = 6; 

printf("You Get six chances to guess all of the letters in a phrase\n"); 
printf("Enter the secret word/phrase: "); 
scanf("%s", &secretword); 
seclength = strlen(secretword); 
alphlength = strlen(alphabet); 
while(GuessCtr != 0) 
{ 
    printf("Past guesses: "); 
    for(i = 0; i < alphlength; i++) 
    { 
     printf("%c", alphabet[i]); 
    } 
    printf("\n"); 
    printf("Guess a character: "); 
    scanf("%s", &guess); 
    printf("\n"); 
    for(i = 0; i < seclength; i++) 
    { 
      if(secretword[i] == guess[0]) 
      { 
       secretword[i] = '*'; 
      } 
      /*else 
      { 
       GuessCtr--; 
       printf("You missed - you have %d wrong guesses left!", GuessCtr); 
      }*/ 
      if(secretword[i] != guess[0]) 
      { 
       GuessCtr--; 
       printf("You missed - you have %d wrong guesses left!", GuessCtr); 
      } 
    } 

    for(i = 0; i < seclength; i++) 
    { 
     printf("%c", secretword[i]); 
    } 
    printf("\n"); 
    for(i = 0; i < alphlength; i++) 
    { 
     if(alphabet[i] == guess[0]) 
     { 
      alphabet[i] = '*'; 
     } 
    } 
} 
printf("You suck!"); 


return 0; 

}

+1

は、コードレビューをしてみたり、最小限の問題にこれを蒸留。 –

+0

最初の 'if'で' secretword'を変更しています。たぶん2番目の 'if'は' else'でしょう。 –

+0

気をつけろ!間違った引数でscanfを使用しています!ポインタをポインタに渡していて、ポインタを渡したいとします。これは数回発生します... – guga

答えて

2

if文の本体は、それが試験の変数を変更し、2つ目は再びテストするため。 2番目のifが評価されると、変数は最初とは異なる値を持ちます。

は、この問題を解決するには、elseを使用する必要があり、その条件は、最初の時から「記憶」されています

 if(secretword[i] == guess[0]) 
     { 
      secretword[i] = '*'; 
     } 
     else 
     { 
      GuessCtr--; 
      printf("You missed - you have %d wrong guesses left!", GuessCtr); 
     } 
1

私はあなたがプログラムと間違っているかについて誤解されている疑いがあります。

これは宿題のように思えるので、私は全体的な状況に応答しませんが、あなたは慎重にエラーを見つけるために、この文を検査する必要があります

scanf("%s", &secretword); 
+0

+1私はその時にそれを逃した、それも重要です。 –

関連する問題