为什么我的for循环没有给出C中的预期输出?

时间:2017-11-08 13:50:40

标签: c arrays loops for-loop counter

我正在尝试将一个字母添加到我在for循环中定义的数组中。每次用户输入内容时,我想将“counterSoFar”减1,然后显示它。但是,“counterSoFar”总是减少2并且跳过用户输入任何内容的机会,而不是将“counterSoFar”减少1.我尝试多次查看代码但我仍然​​无法弄清楚原因。请指教。

# include <stdio.h>
# include <ctype.h>
void userInput(char[]);

int main() {
    printf("Player 1 please enter a word of up to 12 letters.\n");
    char word[13];
    scanf("%13s", word);
    userInput(word);
}
void userInput(char word[])
{
    int n = strlen(word);
    for (int i = 0; i < n; i++)
    {
        word[i] = tolower(word[i]);
    }

    int checker;
    for (int i = 0; i < n; i++)
    {

        if (isalpha(word[i]))
        {
            checker = 1;
        }
        else
        {
            checker = 0;
            printf("Please enter a word without spaces and numbers!\n");
            break;

        }
    }
    if (checker == 1)
    {
        int counterSoFar = 8;
        char letter[1];
        printf("The word to guess is as follows: \n");
        for (int i = 0; i < n; i++)
        {
            printf("_");
        }
        int maxTries = 7;
        for (int guessCounter = 0; guessCounter < maxTries; guessCounter++)
        {
            printf("\n");
            counterSoFar = counterSoFar - 1;
            printf("You have %d tries left!\n\n", counterSoFar);

            printf("Player 2 please enter only 1 letter!\n");
            scanf("%c", &letter);
            char array[13];
            for (int c = 0; c < n; c++)
            {
                if (letter == word[c])
                {
                    array[c] = word[c];
                }
                else
                {
                    array[c] = '_';
                }
            }
            printf("The current array is %c", array);

        }


        }


}

3 个答案:

答案 0 :(得分:3)

  • scanf("%c",&letter);

  • 此外,您将\n作为另一个输入。所以使用scanf(" %c",&letter);来使用\n

如果你考虑的事情很少: -

  1. maxTries是您希望保留在for循环之外的内容。你可能会问为什么?但问题是它有助于保留程序以后可能需要的东西,并提高可读性。

  2. 第二件事是如果你使用的是counterSoFar,那么我猜它是用某种东西启动的。这再次支持我的第一点。您无需在循环中重新初始化maxTries

  3. 作为对你评论的回答,你做错很多事。我将逐一尝试。

    • char word[13];用于12个字符,空终止字符\0

    的scanf( “%12S”,字);

    • 应该是char letter而不是char letter[1]。为什么要使用1个字符的char数组而不只是一个字符?

    • char array[13];应该在for循环之外,以保留已经猜到的字符。

    • 您应该将其初始化为字母字符以外的其他字符,以区分哪些字母字符不被填充。

    这是一个结合修正的小例子: - (如果你尝试在其中加入其他游戏逻辑会更好......我已经显示了一个最小的部分)。

    #include <stdio.h>
    #include <ctype.h> 
    #include  <string.h>
    void userInput(char[]);
    int main() {
        printf("Player 1 please enter a word of up to 12 letters.\n");
        char word[13];
        scanf("%12s", word);
        userInput(word);
    }
    void userInput(char word[])
    {
        int n = strlen(word);
        for (int i = 0; i < n; i++)
            word[i] = tolower(word[i]);
    
    
        char letter;
        printf("The word to guess is as follows: \n");
        for (int i = 0; i < n; i++)
            printf("_ ");
    
        char array[13]={0};
        for(int i=0;i<=11;i++)
            array[i]='_';
        int maxTries = 16;
        int matched = 0;
        for (int guessCounter = 0; guessCounter < maxTries; guessCounter++)
        {
            printf("\n");
            printf("You have %d tries left!\n\n", maxTries - guessCounter);
    
            printf("Player 2 please enter only 1 letter!\n");
            scanf(" %c", &letter);
    
            for (int c = 0; c < n; c++)
            {
                if (letter == word[c] && array[c]=='_')
                {
                    matched++;
                    array[c] = letter;
                    break;
                }
    
            }
            if( matched == n){
                printf("You won!!!!");
                return;
            }
            printf("The current array is ");
            for(int i=0;i<n;i++)
                printf("%c ",array[i]);
    
        }
        printf("You lose!!!!");
    
    }
    

答案 1 :(得分:0)

您需要更改声明:

scanf("%c", letter);

为:

scanf(" %c", &letter);

因为scanf需要将指针作为参数,所以你应该传递变量的地址。需要%c说明符之前的空格来消耗输入之间的\n

答案 2 :(得分:0)

首先改变它是正确的

printf("Player 2 please enter only 1 letter!\n");
        scanf("%c", &letter);