[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