yo no le veo nada malo al codigo, lo unico que si usas la funcion
strlen() deberias incluir
string.h. te compila el codigo?
ahora bien, quizas si que hay algo que sobra. tu puntero a caracter
l realmente no tiene mucha utilidad, ya que apunta al mismo sitio que
linea (en C, si declaras una cadena de caracteres como
char linea[20],
linea es un puntero que apuntar al primer caracter de la cadena). asi pues, podrias prescindir de
l y llamar a tu funcion asi:
datos(linea);luego para comprobar si cada caracter es una vocal, lo haces con esta sintaxis:
*(ln+i), y esto es equivalente a
ln[ i] que quizas es mas sencillo de leer. aunque ambas estan bien asi que eso ya es a tu gusto.
si quieres hacerlo con aritmetica de punteros para practicar, podrias hacer algo asi en tu funcion
datos() y asi ademas te ahorras usar
strlen() e incluir la
string.h:
void datos(char *ln){
int cont=0;
printf("Escriba la linea:\n"); fgets(ln
,79,stdin
); // 79 para dejar espacio al NULL del final for(; *ln; ln++){
if( *ln=='a' || *ln=='e' || *ln=='i' || *ln=='o' || *ln=='u')
cont++;
}
printf("numero de vocales en la frase: %d \n\n", cont
); }
y por ultimo, diria que no hace falta incluir
stdlib.h ya que no usas ninguna funcion ni macro de ahi.
un saludo!