| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
nieves
Registrado: 16 Oct 2004 Mensajes: 146
| Publicado: 18/10/2004 2:28 am | | | Título: Un problema en un ejercicio |
| Hola llevo dias pensando un ejercicio y no me da ningun error pero al ejecutar no sale bien, no se como arreglarlo. Yo ice esto:
#include <stdio.h> #include <conio.h> #include <math.h>
void main() { char operacio; float x, y;
printf ("Introdueix dos nombres reals:\n"); scanf ("%f", &x); scanf ("%f", &y); printf ("Introdueix una operacio valida:\n"); operacio=getchar();
switch (operacio) {
case '+': printf ("La seva suma seria: %f\n", x+y); break;
case '*': printf ("La seva multiplicacio seria: %f\n", x*y); break;
case 'sqrt': printf ("Resultat es: %f\n", sqrt ((x*x)+(y*y))); break;
default: printf ("Sortir\n"); break; } getch(); }
Lo que quiero es que el programa pida dos nombres reales"x" y "y" y me deje escoger entre 4 opciones: 1) Sumarlos 2) Multiplicarlos 3) Efectuar esta operacion: raiz cuadrada de (x*x+y*y) 4) Salir Tengo que programarlo de manera que al menu se tenga que entrar una vez con do/while) i que el menu pueda no ejecutarse i salir directamente (while)
Me seriais de gran ayuda si alguien puede ayudarme, no se exactamente como acabarlo. Gracias! 1saludo! |
| | Volver arriba | |  | elColme

Registrado: 14 Abr 2004 Mensajes: 102 Ubicación: España
| Publicado: 18/10/2004 2:40 am | | | Título: Re: resuelvo ej |
| Aquí tienes tu codigo corregido y operativo.
| Código: | #include <stdio.h> #include <conio.h> #include <math.h>
void main() { char operacio; float x, y;
printf ("Introdueix dos nombres reals:\n"); scanf ("%f %f", &x,&y); getchar();
printf ("Introdueix una operacio valida:\n"); operacio=getchar();
switch (operacio) {
case '+': printf ("La seva suma seria: %f\n", x+y); break;
case '*': printf ("La seva multiplicacio seria: %f\n", x*y); break;
case 'r': printf ("Resultat es: %f\n", sqrt ((x*x)+(y*y))); break;
default: printf ("Sortir\n"); break; } getch(); }
|
|
| | Volver arriba | |  | nieves
Registrado: 16 Oct 2004 Mensajes: 146
| Publicado: 18/10/2004 2:49 am | | | Título: |
| Muchas gracias! lo probé i ahora si que va bien. No entiendo la funcion getchar, porque se pone al principio sola? es para que salga para poner la operacion? y cuando te dice que pongas una operacion solo se puede poner el signo +, * o r? yo pensaba que se tendria que declarar la variable r, porque como se pone hay porque si, tambien se podria poner otra? Es que no hace mucho que estoy con esto de programar y aun tengo muchas dudas. Tampoco entendi porque me dicen lo de salir, si es que el programa se tiene que cerrar o algo, que tengo que poner para que se cumpla lo de salir en el ejecutable? Gracias! |
| | Volver arriba | |  | | elColme

Registrado: 14 Abr 2004 Mensajes: 102 Ubicación: España
| Publicado: 18/10/2004 12:22 pm | | | Título: Re:Re: nieves |
| Hola nieves:
El getchar() después de la petición de los reales es para eliminar el retorno de carro que has introducido tras los dos reales. Si pones entre comentarios ese getchar() verás que siempre se ejecuta la parte default de tu estructura de selección múltiple.
El segundo getchar es el que nos causa el problema, pues va al buffer de entrada y si hay algo lo toma (toma el ASCI 32) y lo mete en operacon en este caso. Esa sentencia ya se ha ejecutado y ahora entra en el switch que tiene el valor 32 y como no hay ningun case que valga eso pues ejecuta el default siempre.
Pero nosotros vamos a poner el valor de lo que el getchar a leido para que exista un case con el valor de operacio y así se ejecute la sentencia asociada a ese case, pongámosla al principio.
| Código: | #include <stdio.h> #include <conio.h> #include <math.h>
void main() { char operacio; float x, y;
printf ("Introdueix dos nombres reals:\n"); scanf ("%f %f", &x,&y); //getchar(); Si quito esta llamada a la función
printf ("Introdueix una operacio valida:\n"); operacio=getchar();//Esta otra no me espera a que introduzca //el caracter que hace de operador saltando a la siguiente instrucción //rápidamente es decir al switch switch (operacio) {
case 32://pero como se que me va a leer el ASCII 32 printf ("La seva suma seria: %f\n", x+y);//Siempre obtendre la suma //de los dos reales introducidos si no hago esto se ejecutará el //default
break;
case '*': printf ("La seva multiplicacio seria: %f\n", x*y); break;
case 'r': printf ("Resultat es: %f\n", sqrt ((x*x)+(y*y))); break;
default: printf ("Sortir\n"); break; } getch(); }
|
Teclea exactamente esto: 2.0<espacio>2.0<espacio> <intro> Obtendras la suma: 4.0
Todo esto ha sido para desvelarte los secretos del getchar.
En tu código te quité el case 'sqrt':
y lo suplanté por 'r' esto es debido a que en un case sólo puedes poner enteros o caracteres.
Saludos |
| | Volver arriba | |  | nieves
Registrado: 16 Oct 2004 Mensajes: 146
| Publicado: 18/10/2004 12:30 pm | | | Título: |
| Muchas gracias me has sido de gran ayuda.Una ultima cosa. Cuando el programa me dice que introduzca una operacion que tengo que teclear?+ o * o r?
Salu2 |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |