Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: UsuarioZ en 12 Junio 2019, 03:59 am



Título: Ayuda FOR
Publicado por: UsuarioZ en 12 Junio 2019, 03:59 am
Cuando lo ejecuto se salta del ciclo 1 al 3.

Código
  1. #include <stdio.h>
  2.  
  3. int vocTot=0, i;
  4. char caracter;
  5. char clave[10];
  6.  
  7. void main()
  8. {
  9.  for(i=1; i<=10; i++)
  10.  {
  11.    printf("Ingrese el caracter %d: ", i);
  12.    scanf("%c", &clave[i]);
  13.  
  14.    caracter=clave[i];
  15.  
  16.    switch (caracter)
  17.    {
  18.    case 'a': vocTot++;
  19.      break;
  20.    case 'A': vocTot++;
  21.      break;
  22.    case 'e': vocTot++;
  23.      break;
  24.    case 'E': vocTot++;
  25.      break;
  26.    case 'i': vocTot++;
  27.      break;
  28.    case 'I': vocTot++;
  29.      break;
  30.    case 'o': vocTot++;
  31.      break;
  32.    case 'O': vocTot++;
  33.      break;
  34.    case 'u': vocTot++;
  35.      break;
  36.    case 'U': vocTot++;
  37.      break;
  38.    }
  39.  }
  40.  
  41.  printf("El numero de vocales es: %d", vocTot);
  42.  
  43. }


Título: Re: Ayuda FOR
Publicado por: K-YreX 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"


Título: Re: Ayuda FOR
Publicado por: UsuarioZ en 12 Junio 2019, 04:36 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:

Código
  1.    scanf("%c", &clave[i]);

por

Código
  1.    scanf("%s", &clave[i]);


Título: Re: Ayuda FOR
Publicado por: K-YreX en 12 Junio 2019, 04:56 am
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.
Código
  1. switch(tolower(clave[i])){
  2.    case 'a': case 'e': case 'i': case 'o': case 'u':
  3.        vocales++;
  4.        break;
  5. }