Título: Problema con una funcion Publicado por: ThronerAXE en 8 Mayo 2013, 18:16 pm Buenas tengo este problema, estoy creando un pedazo de funcion(le tengo que agregar mas funciones) y estoy usando la estructura switch, mi problema es que cuando el programa corre, no entra en la funcion, aqui esta el codigo:
Código
Título: Re: Problema con una funcion Publicado por: leosansan en 8 Mayo 2013, 19:02 pm Problema con el buffer, que en este caso se soluciona dejando un espacio en blanco en los scanf. Esto me da como salida:
Código
Y el código con los espacios puestos: Código
Saluditos!. .... (http://st.forocoches.com/foro/images/smilies/aaaaa.gif) Título: Re: Problema con una funcion Publicado por: pacoperico en 8 Mayo 2013, 19:05 pm Has de vaciar el buffer del stdin despues de usar scanf() en la definicion de tu funcion int menu(void). La forma mas sencilla es añadiendo esta linea justo despues del scanf():
Código
Otras cosa ese switch con un solo case lo puedes quitar del codigo asi como la variable float valor que no la usas para nada. Yo la funcion main() siempre la declaro como int main() y con su return 0, en ver de void main() es costumbre mia. Y la libreria de conio.h siempre intento no usarla tiene funciones que a veces pueden ser problematicas. Código
Título: Re: Problema con una funcion Publicado por: leosansan en 8 Mayo 2013, 19:38 pm Has de vaciar el buffer del stdin despues de usar scanf() en la definicion de tu funcion int menu(void). La forma mas sencilla es añadiendo esta linea justo despues del scanf(): Código
............... Como comenté en el post anterior, en este caso concreto en que sólo se pueda quedar en el buffer es el \n, dejar el espacio en blanco antes del scanf me parece la opción más eficiente y breve. Otra cosa es que quedara resto de una cadena o algo así. Por lo demás muy de acuerdo en el no uso de la librería conio y , como digo yo, sus acólitos getch y compañía. Un fuerte Saludo pacoperico. P.D: Otra cosa a mejorar es el de opción, ya que si le entran una letra en lugar de un 1 o 2 se quedará en el sitio. Título: Re: Problema con una funcion Publicado por: pacoperico en 8 Mayo 2013, 20:26 pm jaja no sabia yo eso de poner un espacio en blanco dentro del scanf() para limpiar el \n en el buffer del stdin. Lo he probado y funciona, es mucho mas sencillo que añadir:
Código
Al codigo pero bueno, yo nunca dejare de usarlo xD. Título: Re: Problema con una funcion Publicado por: amchacon en 8 Mayo 2013, 21:08 pm Por lo demás muy de acuerdo en el dichoso uso de la librería conio y , como digo yo, sus acólitos getch y compañía. Creo que querías decir "desacuerdo"Puedes sustituir getch por getchar(), asi no tendrás que usar la librería conio (solo funciona en Windows, es una buena costumbre hacer las cosas multiplataforma). Título: Re: Problema con una funcion Publicado por: leosansan en 8 Mayo 2013, 21:24 pm Creo que querías decir "desacuerdo" Puedes sustituir getch por getchar(), asi no tendrás que usar la librería conio (solo funciona en Windows, es una buena costumbre hacer las cosas multiplataforma). Desacuerdo total, gracias por la precisión, reeditaré el post para que no queden dudas. Saluditos!. ....(http://st.forocoches.com/foro/images/smilies/aaaaa.gif) Título: Re: Problema con una funcion Publicado por: ThronerAXE en 9 Mayo 2013, 01:22 am Muchas gracias por sus consejos, muchos me dicen sobre no usar la librería conio.h pero el problema esque asi lo evalua la profesora en la universidad. Otra cosita es sobre la limpieza del buffer utilizando el codigo...
Código La profesora nos ha dicho sobre este codigo que limpia el buffer tambien... Código mi pregunta, ¿Hacen la misma funcion?¿y que diferencia hay en colocar un fflush(stdin) y un fflush(stdout). Yo pues la verdad, me gusta experimentar metiendo codigos y ver como interactuan, pero la verdad esque no veo que me altere ni me modifique el programa si las utilizo o no... Otra cosita, les habia comentado que el codigo que habia posteado era un pedazo de funcion, ahora le fui a agregar otra funcion(y es por eso que habia agregado el switch), bueno pues resulta que es el calculo de una funcion matematica, al cual le tengo que pedir que ingrese un valor numerico que sea menor a 1 y diferente de -1/2 y que ademas tengo que validar. el programa corre normal, pero cuando le ingreso el valor se queda en el ciclo y no sale nunca, solamente funciona cuando le doy al valor de la variable el numero 0, alli si funciona, aqui esta el codigo... Código
PD: esta bien que en los codigos utilize quebrados(fracciones), o debería utilizar decimales, lo digo en el caso de la segunda funcion en donde debo validar el valor ingresado por el usuario Título: Re: Problema con una funcion Publicado por: pacoperico en 9 Mayo 2013, 03:20 am mi pregunta, ¿Hacen la misma funcion?¿y que diferencia hay en colocar un fflush(stdin) y un fflush(stdout). Yo pues la verdad, me gusta experimentar metiendo codigos y ver como interactuan, pero la verdad esque no veo que me altere ni me modifique el programa si las utilizo o no... Podemos pensar a priori que fflush(stdin) limpia el buffer de entrada del stdin (teclado) ya que por su parte fflush(stdout) limpia el buffer de salida enviandolo al stdout (pantalla), pero no es asi ya que fflush(stdin) no esta definido en el estandar y su comportamiento es algo totalmente imprevisible. En la chincheta de este foro lo explican mas detalladamente: http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html) PD: esta bien que en los codigos utilize quebrados(fracciones), o debería utilizar decimales, lo digo en el caso de la segunda funcion en donde debo validar el valor ingresado por el usuario Ese -1/2 que tienes en tu codigo, el lenguaje C lo interpreta como una division entre dos numeros enteros (tipo int) y su resultado debera ser un numero entero (de tipo int). Si el resultado de la operacion matematica contiene decimales C lo redondea para convertirlo en un numero entero. En este caso el lenguaje C transforma tu -1/2 a 0. Esto lo puedes comprobar facilmente: Código
Lo mas sencillo seria que cambiases el -1/2 por su valor de -0.5. Otra opcion que tambien tienes, seria sustituir esa division entre numeros enteros (tipo int) por una division entre numeros decimales (tipo float), solo has de añadirle una parte decimal es decir, en lugar de escribir -1/2 escribes -1.0/2.0. Para nosotros los humanos -1/2 es lo mismo que -1.0/2.0 pero para el lenguaje C no lo es. Título: Re: Problema con una funcion Publicado por: amchacon en 9 Mayo 2013, 10:53 am fflus(stdin) solo funciona en Windows. Si quieres que tu código sea multiplataforma debes usar otras alternativas.
Francamente, me parece vergonsozo que profesores recomienden cosas como esa. El toque de gracia será que también haya recomendado el Devcpp (o peor aún, turbo C xD). Personalmente, no uses la librería conio. La única función que estás utilizando es getch() y puedes usar getchar() en su lugar (es correcto, la profesora no te va a decir que no). Si te da a elegir, usa el otro método para limpiar el buffer. No solo hay que aprobar sino acostumbrarse a programar bien. Título: Re: Problema con una funcion Publicado por: leosansan en 9 Mayo 2013, 15:28 pm Con las correciones del -1./2 que te han indicado la salida sería algo como esto:
Código
Cuando creo debería ser : Código
Y eso es porque en el if y en el while debe ir "valor==(-1./2)". Otro dato a tener en cuenta que al poner la condición de que valor ha de ser menor que 1 valdrían los números negativos, pero estos sólo te dan un resultado correcto si son valores enteros y no decimales: Código
Pero: Código
Saluditos!. .... (http://st.forocoches.com/foro/images/smilies/aaaaa.gif) |