[C con Clase] Vocal o Consonante
Steven Richard Davidson
stevenrichard.davidson en gmail.com
Jue Jul 16 17:07:21 CEST 2009
Hola Carlos,
2009/7/16 Carlos Wrangller Encarnacion Rodriguez <carlos.w04 en gmail.com>:
> 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.
>
Veamos el código fuente.
> #include <conio.h>
> #include <stdio.h>
> char letra[3];
> int largo=0;
No te acostumbres a declarar variables globalmente. Mete estas
declaraciones en 'main()'.
> int main ()
> {
> printf ("\n DIGITE UNA LETRA:");
> scanf ("%s",letra);
> while(letra[3] != '\0');
Esto es un error. Recuerda que los índices de un array SIEMPRE
empiezan por 0. Por lo tanto, tu array de 3 elementos los índices van
de 0 á 2. El hecho de que tu programa no se quede retenido en este
bucle es la suerte de que ese elemento contenga un cero (carácter
nulo); pero esto puede cambiar en cualquier instante. La verdad es que
la probabilidad no existe en tu programa, porque el elemento
'letra[3]' realmente es el primer byte de la variable 'largo', que
inicialmente es 0. Sin embargo, si cambias tu programa o incluso el
orden de las declaraciones de tus variables, esta parte no funcionará.
> switch(letra[3])
Aquí tienes el mismo problema. Accedes a un elemento que no pertenece
al array 'letra'.
> {
> 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();
Debes retornar un número entero que por convenio es 0 (cero).
> }
Sugiero declarar 'letra' como un solo 'char' y no como un array. Esto es,
char letra;
...
scanf( "%c", &letra );
switch( letra )
{
...
}
Si quieres usar un array, entonces sólo te interesa el primer
cáracter: 'letra[0]'.
Espero haber aclarado las dudas.
Steven
Más información sobre la lista de distribución Cconclase