我正在为大学指派工作执行子手游戏,并且我已经完成了大部分工作,但由于某种原因,这里的这一部分无法正常工作。我的逻辑有问题吗?这似乎非常简单。
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;
}
答案 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]){
由于u
的大小为3(char user[3]
),因此您需要将for
循环更改为i < 3
,因为数组是基于0的有效索引是0,1,2
,您将超出数组的范围。即user[3]
不是有效的索引。
您没有比较我怀疑想要的索引user_input
。即user_input[i]
。