C ++ не показывает вывод в консоли - PullRequest
0 голосов
/ 05 апреля 2020

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

    #include <bits/stdc++.h>

    using namespace std;

    int binary(int arr[],int key,int low,int high)
    {
        int mid;
       mid=(low+high)/2;

        while(high>=low)
        {
            if(arr[mid]==key)
                {
                 return mid;
                }

            else if(arr[mid]>key)
            {

                high=mid-1;
            }
            else
                low=mid+1;
        }
        return-1;
    }

    int main(void)
    {
       std::cout<<"hello there";   // to test if at least this one gets printed.
       int arr[]={1,4,5,7,8,9,10};
       int key=9;
       int index,low=0,high=6;
       index=binary(arr,key,low,high);
       std::cout <<"element is present at: "<< index << std::endl;
       return 0;

    }

1 Ответ

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

Вы попали в бесконечное l oop, потому что вы никогда не меняете mid в пределах действительного while l oop. Вы устанавливаете его на (0 + 6) / 2 == 3 до запуска l oop и все. Вы должны иметь:

while (high >= low) {
    mid = (high + low) / 2; // line moved in from before while
    if (arr[mid] == key)
    : : : 

Как у вас сейчас, low меняется с 0 на 4, но, поскольку mid не меняется, вы никогда не будете проверять какие-либо другие элементы чем оригинал mid. И low всегда будет установлен на оригинал mid + 1, поэтому всегда будет 4.

Причина, по которой вы никогда не видели первую строку вывода, заключается в том, что без \n или какой-либо другой механизм очистки, он все еще находится в буферах вывода и ожидает отображения. По умолчанию стандартный вывод является линейной буферизацией, если может быть установлено, что он указывает на интерактивное устройство, в противном случае он полностью буферизован (см. здесь для объяснения этого).

...