使用if else语句在C中进行字母猜测游戏

问题描述

我是编程新手,正在尝试通过下面的简单C程序来做这个猜谜游戏。当我从“苹果”一词输入字母时,每个字母(p,l,e)都会执行错误的猜测重试语句,但字母“ a”除外。我似乎无法理解我在这里做错了什么。任何见解都受到高度赞赏。

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#define size 10

int main() {
    // initialize variables
    char word[size] = "apple";
    char guess;
    char arrayofdashes[size] = "_____";
    printf("guess a letter \n");
  
    // input loop
    for (int i = 0; i < strlen(word); i++)
    {
        scanf(" %c",&guess);
        for (int j = 0; j< strlen(word); j++ )
        {
            if (guess == word[j])
            {
                arrayofdashes[j] = guess;
                printf("%s \n",arrayofdashes);

            }
            else
            {
                printf("wrong guess. Try again \n");
                break;
            }
        }
    }
}

解决方法

删除break并添加一个flag变量以检查输入字母的正确性。而且您需要一种更好的方法来检查单词的拼写是否完整。

    char flag;
    int count = 0;
  
    // input loop
    while (count < strlen(word))
    {
        scanf(" %c",&guess);
        flag = 0;
        for (int j = 0; j< strlen(word); j++ )
        {   
            if (guess == word[j] && guess != arrayofdashes[j])
            {
                arrayofdashes[j] = guess;
                count++;
                flag = 1;
            }
        }
        if (flag)
            printf("%s \n",arrayofdashes);
        else
            printf("wrong guess. Try again \n");
    }
,

问题是您使用的是break-在将您的输入与第一个字符进行比较之后,这会退出内部for循环,并阻止将其与后续字符进行比较。

您尝试了哪些策略来自行调试?除了删除break之外,您还需要进行其他一些更改,但找出它们是有趣的一部分

,
for (int j = 0; j < strlen(word); j++)//no two loop
{
    scanf(" %c",&guess);
    if (guess == word[j])
    {
        arrayofdashes[j] = guess;
        printf("%s \n",arrayofdashes);
    }
    else
    {
        printf("wrong guess. Try again \n");
        j--;
    }
}

您不需要输入循环。如果答案不正确,则应从j中减去一个。