Проблема с валидацией для игры палач

Я работаю над игрой палача для присвоения колледжа, и я уже выполнил большую часть работы, но по какой-то причине эта часть здесь не работает. Есть ли проблема с моей логикой? Это кажется невероятно простым.

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

-2

Решение

Цикл for зациклится 4 раза, хотя у вас есть 3 элемента, что заставляет его пытаться получить доступ к неопределенному месту в памяти, чтобы исправить это, заменив ‘я <= 3’ с ‘я<3’

так что в конце концов петля должна выглядеть так:

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

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

};
};
1

Другие решения

Ответ

поскольку 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)

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],

0
По вопросам рекламы [email protected]