Hangman in C.关于数组和字符串的问题

时间:2014-05-15 15:57:36

标签: c

好的,这是我的代码。我应该制作一个程序,向一个玩家询问一个单词,并要求另一个单词找到它,一次猜一个字母。基本上,刽子手。我的问题是这些:

当我尝试将其增加1时,SCounter变量会增加为随机数。我已经尝试过考虑它,但我不知道为什么。例如,当猜测单词是Kala(希腊语为" Good / Fine")时,当我在第一个字母后输入任何字母时,SCounter等于错误的字母数量。

我的第二个问题是guess。我的程序仅在我写char guess[2]时才有效。当我写char guess[0]时,它会永远循环。我不会感到不安,为什么。

int main(int argc, char *argv[]) {

SetConsoleOutputCP(1253);

int i = 0;
start :printf("Enter the guess word: ");
char word[25], sword[25];
char guess[2];
char alphabet[28] = {"abcdefghijklmnopqrstuvwxyz "};
int Counter = 6;
int SCounter = 0; 
gets(word);
for (i=0; i<strlen(word); i++){
    sword[i]='-';
}
while(Counter != 0)
{
    printf("So far: ");
    for(i = 0; i < strlen(alphabet); i++)
    {
        printf("%c", alphabet[i]);
    }
    printf("\n");
    printf("Guess a character: ");
    gets(guess);
    printf("\n");
    for(i = 0; i < strlen(word); i++)
    {
            if(word[i] == guess[0])
            {
                sword[i] = guess[0];
            }
            /*else
            {
                Counter--;
                printf("You only have %d wrong guesses left.\n", Counter);
            }*/
    }
    for(i = 0; i < strlen(sword); i++)
    {
        if (word[i]==sword[i]){
            SCounter++;
        }
        printf("%c", sword[i]);
    }
    printf("\n");
    printf("%d letters found so far.", SCounter);
    printf("\n");
    for(i = 0; i < strlen(alphabet); i++)
    {   
        if  (strlen(guess)<2)
        {
        if(alphabet[i] == guess[0])
            {
            alphabet[i] = '-';
            }
        }
    }
    if (SCounter == strlen(word)){
        Counter = 0;
    }
    if (strcmp(word, sword)==0){
        printf("Congratulation Player 1! You win!\n");
        goto start;
    }
}
return 0;

}

1 个答案:

答案 0 :(得分:1)

看起来SCounter变量在迭代之间没有重置为零,因此它会不断增长。

SCounter的声明/初始化移动到用于解决此问题的范围:

int SCounter = 0; // This is where the declaration should be
// Remove the declaration of SCounter at the outermost scope.
for(i = 0; i < strlen(sword); i++)
{
    if (word[i]==sword[i]){
        SCounter++;
    }
    printf("%c", sword[i]);
}

以下是关于其余程序的一些注释:

  • 使用goto不会为您的教练加分。对许多人来说,这是一面红旗;考虑在没有goto的情况下重写。
  • gets功能本质上是不安全的。请不要将它用于新的开发。请改用fgets(guess, 2, stdin);