si pero dejar así el programa es muy poco elegante ya que la longitud del estring cad2 se ve reducida por 80-(n_vocales) alterando su tamaño original paa esto te propongo 2 soluciones, la primero usar un carácter que se use poco o no se use en una oración como por ejemplo un '*' de modo que
int main(){
int i=0,j,k,l=0;
char cad1[80];
char cad2[80];
while(cad1!='\0'){
i++;
}
for(j=0;j<i;j++){
if(cad1[j]=='a'||cad1[j]=='e'||cad1[j]=='i'||cad1[j]=='o'||cad1[j]=='u'||cad1[j]=='A'||cad1[j]=='E'||cad1[j]=='O'||cad1[j]=='U'||cad1[j]=='I'){
cad1[j]='*';//-> a qui haces que cad1[j] sea igual a '*'
}
}
for(k=0;cad1[k];k++){
if(cad1[k] != '*'){
cad2[l]=cad1[k];
l++;
cad2[l]='\0';
}
}
return 0;
}
la segundo consiste en cambiar un poco la filosofía del programa
quita_vocales.c
#include <stdio.h>
int main(int arv, char* argc[]){
int i = 0, j = 0;
char cad1[80], cad2[80];
while(cad1[i] != '\0'){
if(cad1[i] == 'a' || cad1[i] == 'A' ||
cad1[i] == 'e' || cad1[i] == 'E' ||
cad1[i] == 'i' || cad1[i] == 'I' ||
cad1[i] == 'o' || cad1[i] == 'O' ||
cad1[i] == 'u' || cad1[i] == 'U'){
i++;
continue;
/*mientras sea una vocal pasamos de ella*/
}
else{
cad2[j] = cad1[i];
j++;
cad2[j] = '\0';
/*si no es una vocal la almacenamos en cad2*/
}
i++;
}
return 0;
}
aquí como veras envés de sacar la longitud del estring cad1 sacamos las vocales minetras escaneamos el string cad1
la sentencia
continue Fuerza a que comience una nueva vuelta dentro de la estructura correspondiente. Dentro de los ciclos
while, y do-while, se evalúa la condición de salida; en el for, se efectúa un salto a la expresión de incremento.
Se utiliza para saltarse el resto de la pasada actual a través de un bucle. El bucle no termina cuando se encuentra una sentencia continue, sencillamente no se ejecutan las sentencias que se encuentren a continuación en él, y se salta directamente a la siguiente pasada a través del bucle.