Реализация условия if, которое прерывает while, внутри самого условия while - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть эта часть кода:

int arrayBinary_search(int myarray[], int key){

    int selector;
    int low_limit = 0;
    int high_limit = SIZE;
    while (1){
        selector = (low_limit+high_limit)/2;
        printf("The selector is: %d\n", selector);
        if (myarray[selector] == key){
            return 1;
        }
        else {
            if (low_limit==selector || high_limit==selector)
                break;
            if (key < myarray[selector])
                high_limit = selector;
            else
                low_limit = selector;
            printf("The high_limit is: %d\n", high_limit);
            printf("The low_limit is: %d\n", low_limit);
        }

    }

}

Этот код выполняет двоичный поиск в массиве. Это работает, но while(1) не приятно видеть. Я хотел бы реализовать какое-то условие, чтобы заменить это "1" в то время. Условие было бы, что если внутри цикла while, и это нарушает его. Я попытался с: while (!(low_limit==selector) && !(high_limit==selector)), но он останавливается после первого цикла, так как после первого цикла, «селектор» имеет то же значение «high_limit».

Полный код здесь .

1 Ответ

0 голосов
/ 05 апреля 2020

Вы можете использовать цикл do-while для выхода при нажатии клавиш:

int arrayBinary_search(int myarray[], int key)
{
    int selector;
    int low_limit = 0;
    int high_limit = SIZE;

    do {
        selector = (low_limit + high_limit) / 2;
        printf("The selector is: %d\n", selector);

        if (low_limit == selector || high_limit == selector)
            return 0;
        if (key < myarray[selector])
            high_limit = selector;
        else
            low_limit = selector;
        printf("The high_limit is: %d\n", high_limit);
        printf("The low_limit is: %d\n", low_limit);

    } while (myarray[selector] != key);

    return 1;
}

С другой стороны, функция arrayGenerator не возвращает int, и вам это не нужно, вы должны сделать это void.

...