刽子手游戏的验证问题

Problem with the validation for hangman game

本文关键字:问题 验证 游戏 刽子手      更新时间:2023-10-16

我正在为大学分配制作一个刽子手游戏,我已经完成了大部分工作,但由于某种原因,这里的这部分不起作用。我的逻辑有问题吗?这似乎非常简单。

bool second_check(char user_input) {
    char u[3]={'a','r','i'};
    for (int i = 0; i <= 3; i++) {
        if (user_input==u[i]){
            return true;
        };
    };
    return false;
}
int main(){
    char o;
    cout<<"enter"<<endl;
    cin>>o;

    if (second_check(o)==true) {
        cout << "Correct!" << endl;
    }
    else
        cout << "Wrong! n Strike one!" << endl;
    return 0;
}

即使您有 3 个元素,for 循环也会循环 4 次,导致它尝试访问内存中未定义的位置,以解决此问题将"i <=3"替换为"i<3"

所以 for 循环最后应该是这样的:

for (int i = 0; i < 3; i++) {
    if (user_input==u[i]){
        return true;
    };
};

答案

由于char u[3]={'a','r','i'};只包含 3 个字符,因此 for 循环将是:

for (int i = 0; i <= 2; i++)

for (int i = 0; i < 3; i++) .

解释

这是因为,在 C/C++ 和大多数编程语言中,数组计数从 0 开始。因此,第一个元素将是数组[0],最后一个元素将是数组[n-1],其中n是初始化时使用的数组的大小。(以上,n=3)

因此,如果您清楚地说明问题所在(即预期输出与实际输出),将对社区有所帮助。

也就是说,我可以看到几个问题...

for (int i = 0; i <= 3; i++)
    if (user_input==u[i]){ 
  1. 由于u的大小为 3 (char user[3]),您需要将for循环更改为 i < 3 因为数组是从 0 开始的,有效的索引是0,1,2的,您将超出数组的范围。 即 user[3]不是有效的索引。

  2. 你不是在比较我怀疑你想要的user_input指数。 user_input[i] .