-2

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

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

3 回答 3

1

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

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

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

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

    };
};
于 2018-12-23T20:08:36.810 回答
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)

于 2018-12-23T20:06:32.217 回答
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]

于 2018-12-23T20:08:31.063 回答