【问题标题】:Letter guessing game in C using if else statements使用 if else 语句的 C 字母猜谜游戏
【发布时间】:2020-11-11 19:31:37
【问题描述】:

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

#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;
            }
        }
    }
}

【问题讨论】:

  • 如果您的猜测与单词的第一个字母不匹配,那么您将跳出 for 循环。

标签: c if-statement statements


【解决方案1】:

去掉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");
    }

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:
      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 中减去一个。

      【讨论】:

        猜你喜欢
        • 2021-02-01
        • 1970-01-01
        • 2018-12-05
        • 2017-04-01
        • 2013-03-24
        • 2017-08-31
        • 1970-01-01
        • 1970-01-01
        • 2013-03-27
        相关资源
        最近更新 更多