[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