Member 12865735 Ответов: 3

Пожалуйста, объясните мне, почему я не получаю вывод для приведенного ниже кода.


В приведенном ниже коде, чтобы найти элемент присутствует в массиве или нет,я не получаю вывод, если другая часть раскомментирована.

#include<stdio.h>
int main()
{
    int a[]={2,5,8},i,n=2,flag=0;
     
        for(i=0;i<10;i++)
        {
            if(a[i] == n )
            {
                flag = 1;
            }
            //else 
              //  flag = 0;
        }
        if(flag==1)
                printf("present %d\n",n);
}


Что я уже пробовал:

Если другая часть комментируется, я получаю вывод.

3 Ответов

Рейтинг:
1

OriginalGriff

Просто: если вы раскомментируете строку, то каждый раз, когда она не находит совпадения, она устанавливает флаг "нет совпадения". Это означает, что если вы нашли совпадение в первом местоположении, вы устанавливаете флаг "найдено" и перезаписываете его обратно на "не найдено" для каждого другого символа в массиве.
Лучшее решение этой проблемы просто: выйдите из цикла, когда найдете совпадение:

int main()
    {
    int a[]={2,5,8},i,n=2
    for(i=0;i<10;i++)
        {
        if(a[i] == n )
            {
            printf("present %d\n",n);
            break;
            }
        }
    }


Рейтинг:
1

Jochen Arndt

Когда присутствует часть else, флаг устанавливается в соответствии с последним отмеченным элементом. Тогда цикл не нужен, потому что аналогичная проверка была бы:

if (a[9] == 2)
    flag = 1;
else
    flag = 0;

Записывая его таким образом, вы также должны признать, что получаете доступ к элементам, которые не являются частью массива (вне связанного доступа), потому что Ваш массив имеет размер трех элементов, так что самый высокий допустимый индекс равен двум.


CPallini

5.

Рейтинг:
1

KarstenK

Действительно очевидно, что флаг установлен на 0 в вашем else. Это происходит каждый раз, когда оператор if терпит неудачу.

Вы должны использовать отладчик !!!

И сделать несколькоСЛЕД выводите, если что-то непонятно.