子手游戏验证存在问题

时间:2018-12-23 20:00:43

标签: c++ arrays validation char video-game-consoles

我正在为大学指派工作执行子手游戏,并且我已经完成了大部分工作,但由于某种原因,这里的这一部分无法正常工作。我的逻辑有问题吗?这似乎非常简单。

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 个答案:

答案 0 :(得分:1)

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

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

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

    if (user_input==u[i]){
        return true;

    };
};

答案 1 :(得分:0)

答案

由于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开始。因此,第一个元素将是array [0],最后一个将是array [n-1],其中n是初始化时使用的数组。 (以上,n = 3)

答案 2 :(得分:0)

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

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

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]