No entiendo esto:
int menu1();
Este trozo de código creo que no tiene ni pies ni cabeza. Si <i> vale uno menos que <n>, incrementas <i> (ahora <i == n>) y asignas el valor de <i> a <j> y mientras <j> sea menor que <n> (cosa que ya no es ya que <j == n>)... da igual lo que haga después ya que no se va a hacer.
else if(x=true&&i==n-1){
i++;
cout<<"Este DNI no existe en nuestros datos"<<endl;
for(int j=i;j<n;j++){
variosClientes.Clientes[j] = variosClientes.Clientes[j+1];
Además de eso tienes algunos errores de asignación y comparación. Un igual "=" para asignar un valor <x = false>. Dos iguales "==" para comparar un valor <x == false>. En algunos trozos del programa los usas al revés.
Aparte de eso tener un <while(x == true)> equivale a tener <while(x)> y tener un <while(x == false)> equivale a tener <while(!x)>. Así es más fácil de ver.
También es recomendable en programas con muchas variables sobre todo usar nombres que te ayuden a ver qué hace esa variable ya que yo veo de repente una "t" o una "p" y tengo que ir arriba para ver que era eso.
Tampoco sé cómo has implementado las funciones de lectura que aparecen por ahí entonces no soy capaz de ver cuál es el error. Ya que tampoco sé exactamente cuál es el error, si quieres puedes probar a meter un par de <cout> con las variables que estás comparando en el <if> y así ver cuánto valen y poder encontrar el error.