problema con el siguiente codigo [C]

Iniciado por SoyelRobert, 3 Enero 2014, 14:56 PM

0 Miembros y 2 Visitantes están viendo este tema.

SoyelRobert

Estoy intentado hacer un programa al cual se le introduce un texto por teclado y que vaya cambiando las vocales por su siguiente vocal:

Si lee una 'a' devuelve una 'e'.

Si lee una u devuelve una 'a'.

No se tienen en cuenta mayusculas ni vocales acentuadas.

Este es el codigo:


#include <stdio.h>

int esVocal (char c);
char sigVocal (char c);

int main ()
{
char c;
do{
   if(esVocal(c)) sigVocal(c);
   printf("%c", c);
       }while(scanf("%c", &c)!= EOF);

return 0;
}


int esVocal (char c){
if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u') return;
}

char sigVocal (char c){
if(c=='a')c='e';
if(c=='e')c='i';
if(c=='i')c='o';
if(c=='o')c='u';
if(c=='u')c='a';

return c;
}


El problema es que no cambia la vocal:

si la entrada es:

Citarhola que tal

la salida es:

Citarhola que tal

cuando deberia ser:

Hule qui tel

Una vez lo consiga hacer con la entrada por teclado y la salida por monitor el siguiente paso seria hacerlo con ficheros. salu2
getting louder!

leosansan

#1
Cita de: SoyelRobert en  3 Enero 2014, 14:56 PM
Estoy intentado hacer un programa al cual se le introduce un texto por teclado y que vaya cambiando las vocales por su siguiente vocal:

Si lee una 'a' devuelve una 'e'.

Si lee una u devuelve una 'a'.

No se tienen en cuenta mayusculas ni vocales acentuadas.
...................................................................
Una vez lo consiga hacer con la entrada por teclado y la salida por monitor el siguiente paso seria hacerlo con ficheros. salu2

Antes que nada procura indentar o sangrar el código para que sea más legible y elige las etiquetas de C++, aunque el código sea en C. Salen de esa forma coloreado y es más fácil leerlo.

Y en tema pon una breve descripción de lo que buscas, no aclara nada eso de "problema con el siguiente codigo [C]"

Te pongo el código con las correciones que me han parecido y que no se aparten de tu código original. Por cierto,  ya veras cómo salir del bucle.   ;) ;) ;).


Código (cpp) [Seleccionar]

#include <stdio.h>

int esVocal (char c);
char sigVocal (char c);

int main (){
   char c;
   do{
       puts ("Introduzca vocal:");
       scanf("%c",&c);
       while (getchar ()!='\n');
       if(esVocal(c)!=0)
           printf("%c\n", sigVocal(c));
   }while(c!= EOF);
   return 0;
}

int esVocal (char c){
   int si_o_no=0;
   if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u')
       si_o_no=1;
   else si_o_no=0;
   return si_o_no;
}

char sigVocal (char c){
   if(c=='a')
       c='e';
   else if(c=='e')
       c='i';
   else if(c=='i')
       c='o';
   else if(c=='o')
       c='u';
   else if(c=='u')
       c='a';
   return c;
}


¡¡¡¡ Saluditos! ..... !!!!

:rolleyes: ;) ;) ;) :rolleyes:

SoyelRobert

hola leosansan, no se lo que quiere decir indentar un cogido la verdad...

y respecto a lo que has programado, se sale un poco de lo que en un principio buscaba programar, mira:

el asunto era crear un programa en C que al tu introducir un texto cambie todas las vocales que aparezcan por la siguiente vocal que le toque, no se trata de introducir una única vocal para que la modifique sino introducir un texto entero donde aparezcan blancos, saltos de linea, etc (cualquier caracter hasta que se acabe el fichero, EOF)

salu2 y gracias
getting louder!

joanj94

#3
#include <stdio.h>

int esVocal (char c);
char sigVocal (char c);

int main ()
{
char c;
do{
   if(esVocal(c)){
        sigVocal(c);
   }
   printf("%c", c);
    return 0;
}
while(scanf("%c", &c)!= EOF);

int esVocal (char c){
if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u') return;
}

char sigVocal (char c){
if(c=='a')c='e';
if(c=='e')c='i';
if(c=='i')c='o';
if(c=='o')c='u';
if(c=='u')c='a';

return c;
}


Nose si asi funciona, solo meti los claudators al if, porque vamos, a medida que lee las letras queres que si es una vocal la canvie segun la funcion sigVocal. no?


SoyelRobert

Cita de: joanj94 en  3 Enero 2014, 16:28 PM
#include <stdio.h>

int esVocal (char c);
char sigVocal (char c);

int main ()
{
char c;
do{
   if(esVocal(c)){
         sigVocal(c);
    }
   printf("%c", c);
       }while(scanf("%c", &c)!= EOF);

return 0;
}


int esVocal (char c){
if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u') return;
}

char sigVocal (char c){
if(c=='a')c='e';
if(c=='e')c='i';
if(c=='i')c='o';
if(c=='o')c='u';
if(c=='u')c='a';

return c;
}


Nose si asi funciona, solo meti los claudators al if, porque vamos, a medida que lee las letras queres que si es una vocal la canvie segun la funcion sigVocal. no?

si metes el printf dentro del if solo pintara en caso de que c sea una vocal, por lo tanto, no pintria consonantes.
getting louder!

joanj94

Código:
#include <stdio.h>

int esVocal (char c);
char sigVocal (char c);

int main ()
{
char c;
do{
   if(esVocal(c)){
        sigVocal(c);
   }//fin if
   printf("%c", c);
}// fin dentro del do
while(scanf("%c", &c)!= EOF);

return 0;
}//fin main

int esVocal (char c){
if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u') return;
}// fin esVocal

char sigVocal (char c){
if(c=='a')c='e';
if(c=='e')c='i';
if(c=='i')c='o';
if(c=='o')c='u';
if(c=='u')c='a';

return c;
}//fin sigVocal


El printf esta fura del if


SoyelRobert

si perdona me he colado pero nada tampoco sirve , no cambia las vocales la salida es la misma que la entrada al igual que en mi codigo :(
getting louder!

joanj94

Por cierto, como termina el supuesto texto? con un . o simplemente termina?


SoyelRobert

Cita de: joanj94 en  3 Enero 2014, 16:54 PM
Por cierto, como termina el supuesto texto? con un . o simplemente termina?

?? con un EOF (control Z)
getting louder!

amchacon

Indentar es poner las tabulaciones, vamos poner el código bonito.

Este es tú codigo sin indentar:
Código (cpp) [Seleccionar]
#include <stdio.h>

int esVocal (char c);
char sigVocal (char c);

int main ()
{
char c;
do{
   if(esVocal(c)) sigVocal(c);
   printf("%c", c);
       }while(scanf("%c", &c)!= EOF);

return 0;
}


int esVocal (char c){
if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u') return;
}

char sigVocal (char c){
if(c=='a')c='e';
if(c=='e')c='i';
if(c=='i')c='o';
if(c=='o')c='u';
if(c=='u')c='a';

return c;
}


Este es el código indentado:

Código (cpp) [Seleccionar]
#include <stdio.h>

int esVocal (char c);
char sigVocal (char c);

int main ()
{
   char c;
   do
   {
       if(esVocal(c)) sigVocal(c);
       printf("%c", c);
   }
   while(scanf("%c", &c)!= EOF);

   return 0;
}

int esVocal (char c)
{
   if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u') return;
}

char sigVocal (char c)
{
   if(c=='a')c='e';
   if(c=='e')c='i';
   if(c=='i')c='o';
   if(c=='o')c='u';
   if(c=='u')c='a';

   return c;
}


En cuanto al fallo de tú código, scanf lee hasta un espacio o salto de línea. Para leer letra a letra puedes usar getch() de la librería conio.h, decirte que no es estandar pero cumple su propósito.

Otro error que tienes es:

int esVocal (char c)
{
   if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u') return;
}// fin esVocal


No devuelves nada?
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar