你好,我正在创建子手游戏,并且我具有检查是否猜到单词的功能
例如,输入参数是秘密的“计算机”,而letter_guessed是已经猜到的字母,例如“ fgtcsomputdser”
如果可以使用这些字母构建计算机,则会返回1
我的功能无法正常工作,因为如果我尝试秘密运行它=计算机并猜到= comp,我会猜到1个字
int is_word_guessed(const char secret[], const char letters_guessed[]) {
int guessed;
for(int i = 0; i < strlen(secret); i++) {
guessed = 0;
for(int j = 0; j < strlen(letters_guessed); j++) {
if(secret[i] == letters_guessed[j]) {
guessed = 1;
break;
}
}
}
if(guessed) return 1;
else return 0;
}
答案 0 :(得分:1)
您可以计算出秘密中猜出的字母的数量,如果该数字与秘密的长度相同,则表示单词已被猜中
int is_word_guessed(const char secret[], const char letters_guessed[]) {
int guessed = 0;
for(int i = 0; i < strlen(secret); i++) {
for(int j = 0; j < strlen(letters_guessed); j++) {
if(secret[i] == letters_guessed[j]) {
guessed ++;
break;
}
}
}
if(guessed == strlen(secret)) return 1;
else return 0;
}
答案 1 :(得分:1)
您正在检查secret
中的每个字母是否也位于letters_guessed[]
中,但是在继续检查下一个字母时,不会保留一个字母的结果。因此,最终结果只会告诉您最后一个检查的字母,而不是整个单词。
有多种解决方法,但是我建议扭转测试的含义:在secret
中查找在letters_guessed
中不是 的任何字母。找到这样的字母后,请立即返回0;如果循环终止而未找到该字母,则返回1。