Проблема с валидацией для игры палач
Я работаю над игрой палача для присвоения колледжа, и я уже выполнил большую часть работы, но по какой-то причине эта часть здесь не работает. Есть ли проблема с моей логикой? Это кажется невероятно простым.
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 ответа
Цикл for зациклится 4 раза, даже если у вас есть 3 элемента, в результате чего он попытается получить доступ к неопределенному месту в памяти, чтобы исправить это, заменив 'i <=3' на 'i<3'
поэтому цикл for должен выглядеть так:
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]
,