Ayuda FOR

Iniciado por UsuarioZ, 12 Junio 2019, 03:59 AM

0 Miembros y 1 Visitante están viendo este tema.

UsuarioZ

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);

}

K-YreX

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"
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

UsuarioZ

#2
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]);

K-YreX

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;
    }
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;