Autor
|
Tema: problema con el siguiente codigo [C] (Leído 8,624 veces)
|
SoyelRobert
Desconectado
Mensajes: 46
|
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: hola que tal la salida es: hola que tal cuando deberia ser: Una vez lo consiga hacer con la entrada por teclado y la salida por monitor el siguiente paso seria hacerlo con ficheros. salu2
|
|
« Última modificación: 3 Enero 2014, 14:58 pm por SoyelRobert »
|
En línea
|
getting louder!
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
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. . #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! ..... !!!!
|
|
« Última modificación: 3 Enero 2014, 15:30 pm por leosansan »
|
En línea
|
|
|
|
SoyelRobert
Desconectado
Mensajes: 46
|
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
|
|
|
En línea
|
getting louder!
|
|
|
joanj94
Desconectado
Mensajes: 64
|
#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?
|
|
« Última modificación: 3 Enero 2014, 16:31 pm por joanj94 »
|
En línea
|
|
|
|
SoyelRobert
Desconectado
Mensajes: 46
|
#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.
|
|
|
En línea
|
getting louder!
|
|
|
joanj94
Desconectado
Mensajes: 64
|
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
|
|
|
En línea
|
|
|
|
SoyelRobert
Desconectado
Mensajes: 46
|
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
|
|
|
En línea
|
getting louder!
|
|
|
joanj94
Desconectado
Mensajes: 64
|
Por cierto, como termina el supuesto texto? con un . o simplemente termina?
|
|
|
En línea
|
|
|
|
SoyelRobert
Desconectado
Mensajes: 46
|
Por cierto, como termina el supuesto texto? con un . o simplemente termina?
?? con un EOF (control Z)
|
|
|
En línea
|
getting louder!
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
Indentar es poner las tabulaciones, vamos poner el código bonito. Este es tú codigo sin indentar: #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: #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?
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Como utilizo el siguiente codigo?
Java
|
DrUbLiC
|
5
|
3,771
|
25 Marzo 2008, 23:18 pm
por DrUbLiC
|
|
|
Como inyectar una SHELL por el siguiente codigo PHP
Bugs y Exploits
|
Jnl
|
1
|
4,215
|
7 Febrero 2012, 01:38 am
por s00rk
|
|
|
Que hace el siguiente codigo bat?
Scripting
|
lucas25cba
|
3
|
4,007
|
26 Septiembre 2012, 06:41 am
por dac
|
|
|
C# me explican el siguiente codigo¿?
.NET (C#, VB.NET, ASP)
|
andrecid
|
2
|
2,015
|
11 Agosto 2014, 19:43 pm
por andrecid
|
|
|
¿Que opinan de el siguiente codigo que calcula la edad de una persona?
Programación C/C++
|
maicol_962016
|
0
|
1,567
|
20 Febrero 2016, 16:36 pm
por maicol_962016
|
|