问题描述
我是编程新手,正在尝试通过下面的简单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中减去一个。