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

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

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]){ 
  1. поскольку u имеет размер 3 (char user[3]), вам нужно изменить свой for цикл должен быть i < 3 поскольку массивы основаны на 0, допустимые индексы 0,1,2 и вы выйдете за пределы массива. Т.е. user[3] недопустимый индекс.

  2. Вы не сравниваете индекс user_input что я подозреваю, что вы хотите. т.е. user_input[i],

Другие вопросы по тегам