Buenas.
Mira para empezar lo primero que hay que detallar, en mi caso hace q no funcione, puede que segun que compilador uses traiga problemas o no.
Cuando recoges datos de la pantalla se almacenan en un buffer, y hay veces que el buffer no se libera al reutilizar la funcion, por lo que la pasa por alto y queda almacenado el valor anterior. Para prevenir esto es conveniente limpiar el bufer de lectura antes de leer un dato, de la siguiente manera:
Luego para contar caracteres necesitas un bucle, no una iteracion, por ejemplo esta si quieres ir comparando como tienes en tu programa:
j=0;
cont = 0;
while (con[j] != '\0'){
if((con[j]=='a')||(con[j]=='e')||(con[j]=='i')||(con[j]=='o')||(con[j]=='u')||
(con[j]=='A')||(con[j]=='E')||(con[j]=='I')||(con[j]=='O')||(con[j]=='U')){cont++;}
j++;
}
printf("La cantidad de vocales en la cadena \"%s\" es: %d",con, cont);
Espero que te sea util, saludos
Edito, se me habia olvidado la parte del archivo.
En tu fichero cuentas las vocales de la cadena que se ingresa. Para contar las del archivo, debes midificar la funcion fputs por
con es el buffer de almacenamiento, 200 es el tamaño del buffer, con eso si el archivo tiene mas de 200 caracteres solo se leeran 199. y chuy es el fichero
Para que no se te queden partes afuera si el archivo es mas grande debes agregar un bucle con esa funcion hasta que aparesca el caracter de fin de fichero '\0'