[C con Clase] Vocal o Consonante

Samuel Porras samuelporras en gmail.com
Sab Jul 18 12:55:57 CEST 2009


Tienes un par de pequeños errores en tu código:

 while(letra[i++] != '\0');
   switch(letra[i])
   {
      case 'a': case 'e': case 'i': case 'o': case 'u':
       printf ("\n La letra %c es una vocal", letra[i]);
         break;
       default:
         printf ("\n La letra %c es una consonante", letra[i]);
    }


El punto y coma después del while hace que no repita la estructura 
switch, deberías ponerlo así:

 while(letra[i++] != '\0')
 {
   switch(letra[i])
   {
      case 'a': case 'e': case 'i': case 'o': case 'u':
       printf ("\n La letra %c es una vocal", letra[i]);
         break;
       default:
         printf ("\n La letra %c es una consonante", letra[i]);
    }
 }

así el switch queda encerrado entre llaves y se repite con el while.

también declaras:

 int largo=0

y no es utilizada en ningún momento en el programa,

según tu código también utiliza solo las constantes en minúsculas 
deberías utilizar una variable donde guardar cada carácter pasado a 
minúsculas con:

Librería:
#include <ctype.h>
Función:
int tolower( int char );

para pasar cada carácter a minúsculas y así aunque la cadena sea en 
mayúsculas tu código funcione.

Para un proyecto útilice dicha liberria para cambiar una cadena entera a 
minúsculas la función era así:

char *toMinuscula( char *contenedor, const char *cadena ) {
    int caracter;
    for ( caracter = 0; cadena[caracter] != '\0'; caracter++)
        contenedor[caracter] = tolower( cadena[caracter] );

    contenedor[caracter] = '\0';

    return contenedor;
}

la forma de utilizarla es:

crear un array char que será como un contenedor con la palabra en 
minúsculas y en el segundo argumento pasarle la cadena a modificar por 
ejemplo:

Ejemplo:

[codigo]

//Librerias utilizadas
#include <stdio.h>
#include <ctype.h>

//Prototipo de la función para pasar una cadena a minúsculas
char *toMinuscula( char *contenedor, const char *cadena ) ;

int main ()
{

 char palabra[100];
 char contenedor[100];
 int i = 0;

 printf("\n DIGITE una palabra:");

 scanf( "%s" , palabra);

 toMinuscula( contenedor, palabra );

 while(contenedor[i++] != '\0')
 {
   switch( contenedor[i] )
   {
      case 'a': case 'e': case 'i': case 'o': case 'u':
       printf("\n La letra %c es una vocal", contenedor[i]);
         break;
       default:
         printf("\n La letra %c es una consonante", contenedor[i]);
    }
 }
}

//Función para pasar a minúsculas
char *toMinuscula( char *contenedor, const char *cadena ) {

    int caracter;

    for ( caracter = 0; cadena[caracter] != '\0'; caracter++)

        contenedor[caracter] = tolower( cadena[caracter] );



    contenedor[caracter] = '\0';



    return contenedor;

}

[/codigo]

Un cordial saludo!

Leonel Florín Selles escribió:
> A ver mi amigo, de seguro que ya has encontrado la respuesta pero yo tambieén te
> voy a responder.
>
> 1- estas utilizando un char letra[3]; donde tienes un arreglo tipo char para 3
> letras, y tu programa solo necesita la entrada de una sola letra para eso puede
> hacer una declaración char letra;
> 2- basado en tu arreglo de tipo char, haces un ciclo donde como le pides al
> usuario que entre una letra, pues los dos ultimos elementos del arreglo van a
> ser = '/0', por lo que el ciclo nunca se va a ejecutar. y por eso salta al final
> con la respuesta,
>
> analiza la solución que te voy a dar para ese arreglo de 3 letras.
>
>   int main ()
> {
>
>  char letra[100];
>  int largo=0, i=0;
>
>  printf ("\n DIGITE una palabra:");
>
>  scanf ("%s",letra);
>
>  while(letra[i++] != '\0');
>    switch(letra[i])
>    {
>       case 'a': case 'e': case 'i': case 'o': case 'u':
>        printf ("\n La letra %c es una vocal", letra[i]);
>          break;
>        default:
>          printf ("\n La letra %c es una consonante", letra[i]);
>     }
>   getch();
> }
>
> mira este programa, va a tomar una sola palabra y te va a devolver letra por
> letra si es una vocal o consonante.
>
> saludos. espero te pinche.
>
>   
>> Tengo el siguiente programa pasa saber si un caracter es vocal o consonante
>> pero siempre me dice que es consonante nose q tengo mal me imagino q cuando
>> hace la comparacion en el switch el caracter que llega no es la vocal pero
>> si le introdusco 2 (a) me dice q es consonante como quiera.
>>
>> #include <conio.h>
>> #include <stdio.h>
>> char letra[3];
>> int largo=0;
>> int main ()
>> {
>> printf ("\n DIGITE UNA LETRA:");
>> scanf ("%s",letra);
>> while(letra[3] != '\0');
>> switch(letra[3])
>> {
>>    case 'a': case 'e': case 'i':
>>    case 'o':
>>    case 'u':
>> printf ("\n La letra %s es una vocal",letra);
>>       break;
>>    default:
>> printf ("\n La letra %s es una consonante",letra);
>> }
>> getch();
>> }
>> _______________________________________________
>> Lista de correo Cconclase Cconclase en listas.conclase.net
>> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>>     
>
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
>   




Más información sobre la lista de distribución Cconclase