2016-02-19 4 views
1

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

#include <iostream> 
#include <vector> 
#include <stdexcept> 
#include <iomanip> 
#include <cstdlib> 
#include <array> 
#include "problem2.h" 

using namespace std; 

int binarySearch(int array[], int input); 
void selectSort(int arr[], int n); 

int problem2() { 
    srand(time(0));   // generate seed based on current system time 

    int rand[20]; 
    int result; 
    int input = 1; 


    cout << "Enter a number to search for: "; 
    cin >> input; 

    cout << "testset "; 

    for (int z = 0; z < 19; z++) { 
     rand[z] = random() % 70; 
     cout << rand[15]; 
    } 


    selectSort(rand, 20); 


    for (int t = 0; t < 20; t++) { 
     //cout << random1D[z]; 
     } 
    result = binarySearch(rand, input); 
    //cout << result; 

    return 0; 
    } 

int binarySearch(int arr[], int a) { 
    int high = 19; 
    int middle = 19/2; 
    int low = 0; 

    while (arr[middle] != a && low<= high) { 
     if (arr[middle] > a) { 
      high = middle - 1; 
     } else { 
      low = middle - 1; 
     } 

     if (low > high) { 

     } 
    } 
    return middle; 
} 

void selectSort(int arr[], int n) { 
    int min, temp; 

    for (int i = 0; i < n-1; i++) { 
     min = i; 

     for (int j = i + 1; j < n; j++) { 
      if (arr[j] < arr[min]) 
        min = j; 
     } 
     if (min != i) { 
      temp = arr[i]; 
      arr[i] = arr[min]; 
      arr[min] = temp; 
     } 
    } 
} 
+0

Это не похоже на хорошо сформированную программу, там нет 'main'. – kfsone

+3

У вас есть цикл while, который продолжается до тех пор, пока вы не найдете значение в 'binarySearch', но вы не можете найти указанное значение, когда вы заполняете свой массив случайными значениями. –

+0

@R_Kapp - это место на. Это было бы очевидно, если бы вы попытались использовать отладчик. Cout не отображается, потому что вывод все еще находится в выходном буфере. –

ответ

0

У вас есть несколько циклов, но все они, кроме одного, имеют явное прекращение. for завершает весь конец после определенного количества итераций, но ваш цикл while менее определен. Ваш low, вероятно, никогда не будет больше вашего high, поэтому цикл просто продолжается.

Рассмотрите возможность изменения на low = middle + 1 или измените свою логику, чтобы, скорее всего, убедиться, что low в конечном итоге обгонит high. Или, измените условие проверки петли while.