Я работаю над игрой палача для присвоения колледжа, и я уже выполнил большую часть работы, но по какой-то причине эта часть здесь не работает. Есть ли проблема с моей логикой? Это кажется невероятно простым.
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;
}
Цикл for зациклится 4 раза, хотя у вас есть 3 элемента, что заставляет его пытаться получить доступ к неопределенному месту в памяти, чтобы исправить это, заменив ‘я <= 3’ с ‘я<3’
так что в конце концов петля должна выглядеть так:
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. Поэтому первым элементом будет array [0], а последним будет array [n-1], где n — размер используемого массива. при инициализации. (Выше, n = 3)
Таким образом, для сообщества было бы полезно, если бы вы четко указали, в чем заключается проблема (т.е. ожидаемый или фактический результат).
Тем не менее, пару проблем я вижу …
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]
,