ayuda con un programa de c en eclipse

Iniciado por kikian94, 19 Octubre 2012, 15:44 PM

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

kikian94

HOla, tengo que hacer esto: Diseñar y codificar en C un programa que lea por el teclado (entrada estándar) una secuencia de caracteres terminada en '.' (punto), donde el punto no pertenece a la secuencia, y escriba por la pantalla (salida estándar) el número de apariciones en la serie de cada una de las vocales (mayúsculas o minúsculas) y el número de caracteres que no son vocales. Las vocales acentuadas se no se considerarán como vocales en este ejercicio.
#include <stdio.h>
int main(void){
   /*variable*/
   char letra;
   int cona;
   int cone;
   int coni;
   int cono;
   int conu;
   int otrocarac;
   int contadorvoc;

   cona = 0;
   cone = 0;
   coni = 0;
   cono = 0;
   conu = 0;

   otrocarac = 0;
   contadorvoc = 0;

   /*acciones*/
   printf("Introduzca frase:");
   scanf ("%c", &letra);
   while (letra!='.'){
      switch (letra){
         case 'a':
         case 'A':
            cona++;
            break;
         case 'e':
         case 'E':
            cone++;
            break;
         case 'i':
         case 'I':
            coni++;
            break;
         case 'o':
         case 'O':
            cono++;
             break;
          case 'u':
          case 'U':
             conu++;
             break;
          default :
             otrocarac++;
             break;
         }
      contadorvoc = cona+cone+coni+cono+conu;
      }


   printf ("\nEl numero de caracteres que no son vocales es:%d",otrocarac);
   printf ("\nEl numero de vocales es:%d", contadorvoc);
   printf ("\n%d son aes", cona);
   printf ("\n%d son es", cone);
   printf ("\n%d son ies", coni);
   printf ("\n%d son oes", cono);
   printf ("\n%d son ues", conu);

   return 0;
}
lo he hecho pero el problema es que se queda pillado el programa y no se que hacer. Gracias de antemano

rir3760

Cita de: kikian94 en 19 Octubre 2012, 15:44 PMel problema es que se queda pillado el programa y no se que hacer.
Eso se debe a que una vez se entra en el bucle nada modifica el valor de la variable "letra" terminando como un bucle infinito.

Para solucionarlo debes obtener el siguiente carácter, modifica el bucle de esta forma:
scanf ("%c", &letra);
while (letra!='.'){
   /* ... */

   contadorvoc = cona+cone+coni+cono+conu;
   
   scanf ("%c", &letra);
}


Para evitar la repetición de la llamada a "scanf" se puede utilizar:
while (scanf("%c", &letra) == 1 && letra!='.'){
   /* ... */
   
   contadorvoc = cona+cone+coni+cono+conu;
}

Se verifica que el valor de retorno de la función es igual a uno porque ello indica una lectura sin problemas del carácter.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

kikian94

muchas gracias, he puesto scanf al final y todo perfecto, que despiste :xD