Почему мы используем условие if(i==n-1), когда мы не находим искомый элемент в массиве? Как это вообще работает?

#c #arrays #loops #if-statement

Вопрос:

 int main()
{
    cout << "Enter the number whose index no. you want to find " << endl;
    cin >> a;

    for (int i = 0; i < n; i  )
    {
        if (numbers[i] == a)
        {
            cout << "Its index no. is " << i << endl;
            break;
        }
        if (i == n - 1)
        {
            cout << "No. not found in Array" << endl;
        }
    }

    return 0;
}
 

Какая польза от if(i==n-1) этого в этом? Как он функционирует? Пожалуйста, помогите!

Комментарии:

1. n — 1-это последний допустимый индекс в массиве. Поскольку я только что проверил в верхней части цикла, если это последний индекс (n-1), то он выводит сообщение «Не найден».

2. Насколько я видел, этот код не является особенно распространенным способом сделать это в первую очередь. Обычно вы вызываете функцию, чтобы найти элемент , который вы ищете (например std::find , indexOf на некоторых языках), и if будет проведена простая проверка возвращаемого значения этой функции.

3. Другим способом было бы просто изменить значение break на a return , а затем переместить not found сообщение после for цикла, например: for (int i = 0; i < n; i ) { if (numbers[i] == a) { cout << "Its index no. is " << i << endl; return 0; } } cout << "No. not found in Array" << endl;

Ответ №1:

Поскольку ваш цикл будет идти от 0 до n-1, и если значение также отсутствует в последнем элементе, то код печатает сообщение.

Ответ №2:

Этот цикл:

 for (int i = 0; i < n; i  )
{
    if (numbers[i] == a)
    {
        cout << "Its index no. is " << i << endl;
        break;
    }
    if (i == n - 1)
    {
        cout << "No. not found in Array" << endl;
    }
}
 

это просто плохой код, который может запутать читателей.

Его можно было бы переписать следующим образом:

 int i = 0;

while ( i < n amp;amp; numbers[i] != a ) i  ;

if ( i != n )
{
    cout << "Its index no. is " << i << endl;
}
else
{
    cout << "No. not found in Array" << endl;
}
 

То есть, если число найдено в массиве, то есть если условие numbers[i] != a оценивается как ложное, это означает, что целевое число находится в позиции i. В противном случае будут проверены все элементы массива, и в этом случае я буду равен n, потому что допустимый диапазон индексов равен [0, n - 1) .

В исходном цикле, если целевой номер найден в цикле for, выводится соответствующее сообщение, и элемент управления выходит из цикла из-за оператора break. В противном случае, если это последний элемент массива (то есть с индексом n - 1 ), и он не равен целевому номеру, это означает, что в массиве больше нет элементов для сравнения. Эта итерация, когда i равно n — 1, является последней итерацией, поэтому элемент в массиве, равный переменной a, не найден.