¿Dónde está el error en mi código para realizar la búsqueda binaria?

Estaba escribiendo código para un algoritmo de búsqueda binario.

Código:

#include "cs50.h"

int main(void) {
    int n = GetInt();
    int value = GetInt();
    int values[n];

    for (int i = 0; i < n; i++) {
        printf("Put in number %i ", i + 1);
        values[i] = GetInt();
    }

    int mid = (n - 1) / 2;
    int en = 0;
    int ex = n - 1;

    for (int i = 0, xt = i + 1; i < xt; i++) {
        if (value > values[mid]) {
            en = mid;
            mid = (en + ex) / 2;
        }
        else if (value < values[mid]) {
            ex = mid;
            mid = (en + ex) / 2;
        }
        else if (value == values[mid]) {
            printf("found");
            break;
        } else {
            printf("not found");
            break;
        }
    }
}

Pero solo funciona cuando el valor que se encuentra está en algún punto intermedio.

Falla cuando:

El valor a encontrar es el primero o el último.el valor a encontrar no está en los valores ingresados.

Realmente no puedo entender el error.

Respuestas a la pregunta(3)

Su respuesta a la pregunta