Hola.
Antes de responder a tu duda, comentaré algunos errores del programa:
Declaras la variable nombres[10][10]. Eso bien. Pero después, en el primer for, pides los nombres, haciendo esto:
for (i=0; i<10; i++)
Eso no es correcto. Para pedir un *char (cadena de caracteres),
no se debe poner el
& en el scanf, y para meter 10 nombres, uno en cada fila de la "matriz de letras", debes poner
(para indicar el número del nombre que vas a pedir, es decir, empiezas por la fila 0 (o nombre 0), y vas así hasta el 9).
Por otra parte, para pedir cadenas de caracteres, te recomiendo usar gets() o fgets(), ya que son funciones específicas para dicha función, y pueden leer espacios, al contrario que scanf(), que cuando lee uno, para de leer los datos.
for (i=0; i<10; i++)
Dicho esto, respondo a tu duda:
Situémonos en el bucle for que está en el do-while. Las variables
i y
j incrementan en 1 simultáneamente. Si la variable "otrosNombres" contiene la misma información que "nombres" (strcmp compara dos cadenas: devuelve 0 si ambas son iguales, u otro número si son diferentes), a j se le resta 1. Así, al terminar el bucle for, si i y j son iguales, ninguna cadena contenida en "nombres" será idéntica a "otrosNombres", y si su valor es diferente, sí que hay un nombre igual que a cadena "otrosNombres".
Un saludo.