Cuando lo ejecuto se salta del ciclo 1 al 3.
#include <stdio.h>
int vocTot=0, i;
char caracter;
char clave[10];
void main()
{
for(i=1; i<=10; i++)
{
printf("Ingrese el caracter %d: ", i);
scanf("%c", &clave[i]);
caracter=clave[i];
switch (caracter)
{
case 'a': vocTot++;
break;
case 'A': vocTot++;
break;
case 'e': vocTot++;
break;
case 'E': vocTot++;
break;
case 'i': vocTot++;
break;
case 'I': vocTot++;
break;
case 'o': vocTot++;
break;
case 'O': vocTot++;
break;
case 'u': vocTot++;
break;
case 'U': vocTot++;
break;
}
}
printf("El numero de vocales es: %d", vocTot);
}
Es porque los ENTER se están quedando en el buffer y entonces se asignan al siguiente valor.
Pongamos que quieres introducir la palabra "hola", lo que estás guardando es: "h" + ENTER + "o" + ENTER + "l" + ENTER + "a"
Cita de: YreX-DwX en 12 Junio 2019, 04:23 AM
Es porque los ENTER se están quedando en el buffer y entonces se asignan al siguiente valor.
Pongamos que quieres introducir la palabra "hola", lo que estás guardando es: "h" + ENTER + "o" + ENTER + "l" + ENTER + "a"
Gracias, cambie esta linea para solucionarlo:
scanf("%c", &clave[i]);
por
scanf("%s", &clave[i]);
No sé si te obligan a usar un <for> y <scanf()> pero no es recomendable usar <scanf()> para esto. Lo suyo sería guardar toda la palabra de una sola vez con <fgets()> y después recorrer la palabra sumando las vocales.
Aparte, esa implementación es un poco ineficiente. Te recomendaría cosas como:
- Convertir el caracter a minúscula/mayúscula siempre.
- Unificar los case.
switch(tolower(clave[i])){
case 'a': case 'e': case 'i': case 'o': case 'u':
vocales++;
break;
}