Foros del Web » Programación para mayores de 30 ;) » C/C++ »

problema con el bucle do while

Estas en el tema de problema con el bucle do while en el foro de C/C++ en Foros del Web. Hola!!! Tengo elaborado un programa con el bucle do while, pero al ejecutarlo se me repite dos veces el menu principal ¿a que puede ser ...
  #1 (permalink)  
Antiguo 26/12/2009, 08:37
 
Fecha de Ingreso: diciembre-2009
Mensajes: 4
Antigüedad: 14 años, 4 meses
Puntos: 0
problema con el bucle do while

Hola!!! Tengo elaborado un programa con el bucle do while, pero al ejecutarlo se me repite dos veces el menu principal ¿a que puede ser debido? Aqui os dejo el código(el codigo esta hecho en C)
. Muchas gracias!!!!



#include <stdio.h>
#include <stdlib.h>

int num1;
int num2;
int resultado;
int introducido;
char opcion;

int main(){
printf("Este juego nos realiza la suma de dos numeros");
do{
printf("Elija la opcion deseada:\n");
printf("Pulse J o S\n");
scanf("%c",&opcion);

if(opcion=='J'){
num1=rand()%5;
num2=rand()%5;
resultado=num1+num2;
printf("%d+%d", num1, num2);
scanf("%d", &introducido);}
if (introducido==resultado){
printf("Enhorabuena has acertado\n");
}
else
printf("Has fallado,el resultado es: %d", resultado);
if (opcion=='S'){
printf("Gracias por haber jugado"); }



}while (opcion!='S');
system("pause");
return 0;
}
  #2 (permalink)  
Antiguo 26/12/2009, 12:54
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: problema con el bucle do while

¿Sera por no tomar en cuenta las minusculas? Te recomiendo TABULAR el codigo y usar siempre llaves ({}), de esa manera verias que la parte de comparacion del resultado se ejecuta siempre, sea o no opcion J.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 27/12/2009, 17:40
Avatar de pmike  
Fecha de Ingreso: marzo-2004
Ubicación: Barcelona
Mensajes: 313
Antigüedad: 20 años, 1 mes
Puntos: 7
Respuesta: problema con el bucle do while

Perdona, pero no entiendo bien el programa que has realizado.

1.-Primero situas variables globales, mal comienzo, siempre han de estar dentro del 'main' a no ser que sea algo muy especifico y que te interese, no creo q sea el caso.
2.-Las varibles no estan inicializadas a cero, por lo tanto te pueden coger cualquier valor el preprocesador.

Te aparece dos veces el menu porque me da la impresion que no borras pantalla, después de acabar la rutina.
Yo pondrìa la famosa funcion 'clrscr()' en la condición if siguiente:

if (introducido==resultado){
printf("Enhorabuena has acertado\n");
clrscr();
}

Ah se me olvidaba tienes que poner en el encabezamiento el incluir esa función con la siguiente librería:
#include <conio.h>

ya me comentaras si era lo que querias
__________________
www.visitaspirata.com
  #4 (permalink)  
Antiguo 27/12/2009, 17:44
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: problema con el bucle do while

Mejor no usar esa funcion ... no es standard; de ser necesario eso podes recurrir a system aunque normalmente no es necesario.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 28/12/2009, 07:25
Avatar de pmike  
Fecha de Ingreso: marzo-2004
Ubicación: Barcelona
Mensajes: 313
Antigüedad: 20 años, 1 mes
Puntos: 7
Respuesta: problema con el bucle do while

Si bueno, también puedes realizar una llamada al sistema con:

system("cls"); que tambien es una función, y te evitas de declarar la libreria, aunque yo siempre he utilizado la libreria 'conio.h' y me ha ido fenomenal, y además en mis examenes de c++ la utilizaba y ningun examinador me decía nada, ni a mi ni a mis compañeros.
__________________
www.visitaspirata.com
  #6 (permalink)  
Antiguo 28/12/2009, 07:45
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: problema con el bucle do while

Por eso mismo, debido a la existencia de instituciones educativas donde se enseña con tecnologias obsoletas como el Turbo C de Borland es necesario recordar constantemente que esa libreria (conio) y sus funciones no son standard y no tienen que estar soportadas por ningun compilador.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #7 (permalink)  
Antiguo 28/12/2009, 08:09
 
Fecha de Ingreso: diciembre-2009
Mensajes: 4
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: problema con el bucle do while

He probado tanto con el system como con la funcion de la libreria <conio.h> y no me funciona nada. Porque si pongo esas funciones no me deja ver lo que el programa me escribe, sale pero no da tiempo a verlo de todas formas gracias!!
  #8 (permalink)  
Antiguo 28/12/2009, 09:33
Avatar de pmike  
Fecha de Ingreso: marzo-2004
Ubicación: Barcelona
Mensajes: 313
Antigüedad: 20 años, 1 mes
Puntos: 7
Respuesta: problema con el bucle do while

SI es verdad yo soy de los q siempre han utilizado Borland c++ y funciones como:
clrscr()
gotoxy() -> por cierto muy importante para dibujar gráficos de coordenadas (x,Y)
cputs()
putch()
getch()
getche()
kbhit()

de la libreria <conio.h>

Y como puedes observar no me arrepiento, ya que aprendía con ellas y otras más c++.
Lo que no entiendo, ya que desprestigias tal libreria, como para programar en DEV C++
existe un paquete de instalación de la libreria 'conio.h'para dicho entorno de programación, si fuera tan malo no existiría tal paquete no crees ??
__________________
www.visitaspirata.com
  #9 (permalink)  
Antiguo 28/12/2009, 09:55
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: problema con el bucle do while

Es irrelevante que te arrepientas o no ... no aprendiste nada util, son funciones arcaicas y obsoletas orientadas a un S.O. idem (MS-DOS).

¿Alguien se tomo el tiempo de portar alguna de la funcionalidad a otro compilador? Nuevamente IRRELEVANTE, eso no cambia los hechos, NO ES STANDARD, no hace falta que YO diga nada sobre la misma, no TIENE ningun prestigio en lo absoluto.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #10 (permalink)  
Antiguo 28/12/2009, 11:33
 
Fecha de Ingreso: diciembre-2009
Mensajes: 4
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: problema con el bucle do while

ya solucione el problema con la funcion fflush(stdin) asi limpiando el buffer ya no me sale.
Y yo no he desprestigiado ninguna libreria simplemente he dicho que a mi no me sirve para mi cometido.

Gracias a todos!!!
  #11 (permalink)  
Antiguo 28/12/2009, 11:50
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: problema con el bucle do while

Otra opcion, esta si standard, es usar fgets (con stdin) y sscanf, de esa manera no ensuciamos el buffer y no nos tenemos que preocupar de limpiarlo.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #12 (permalink)  
Antiguo 28/12/2009, 13:25
Avatar de pmike  
Fecha de Ingreso: marzo-2004
Ubicación: Barcelona
Mensajes: 313
Antigüedad: 20 años, 1 mes
Puntos: 7
Respuesta: problema con el bucle do while

Ves al final era un problema de limpiar buffer, una duda que entorno de programacion utilizas ??
__________________
www.visitaspirata.com
  #13 (permalink)  
Antiguo 28/12/2009, 13:43
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: problema con el bucle do while

Si, el buffer de entrada - aunque el problema en si es ensuciarlo -, no la salida (consola).
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:51.