• Viernes 3 de Mayo de 2024, 03:23

Autor Tema:  Re: sobre goto y una ayudita  (Leído 1024 veces)

abufajad

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: sobre goto y una ayudita
« en: Viernes 7 de Marzo de 2003, 22:04 »
0
:beer:buenas, estuve viendo el curso que tienen de c, y me di cuenta de que hablan de goto y mencionan que "es una sentencia mal vista en c" por que es esto? que sentencia me ayudaria a hacer lo que hace goto aqui:


main()
{
                inicio:   
                clrscr();
   printf("Bienvenido a Circunferencias 1.0");
   printf("nn1.Perimetro de Circulos");
   printf("n2.Area de Circulos");
   printf("nSelecciona tu opcion:");
   scanf("&respuesta");
   if (respuesta > 2) {
   printf("nOpcion incorrecta");
   goto inicio;
   }
   if (respuesta < 0) {
   printf("nOpcion Incorrecta");
   goto inicio;
   }
   if (respuesta = 1) {
   perimetro();
   }
   if (respuesta = 2) {
   area();
   }
}

(se que hay parte del codigo que esta malo, pero vean lo de el goto) eso me inquita bastante...

por otro lado, para cambiar de estilo quise probar la funcion textcolor pero con un color que el usuario elija:


main()
{              
                int color,radio;
   float peri,area;
   printf("Introduce un color: ");
   scanf("%d",&color);
   textcolor(&color); .........

pero me muestra error, creo que los argumentos como variable no los lee, alguna sugerencia o respuesta a alguna de mis preguntas? suplico su respuesta   :ayuda:

José D

  • Miembro MUY activo
  • ***
  • Mensajes: 235
    • Ver Perfil
Re: sobre goto y una ayudita
« Respuesta #1 en: Sábado 8 de Marzo de 2003, 18:55 »
0
Transfiere el control a una línea específica de código, identificada por una etiqueta o por un número de línea. Su sintaxis es:   
GoTo ETIQUETA/NUMERO_LÍNEA



El uso del GOTO implica un salto incondicional de un lugar a otro del programa . Esta práctica hace que los programas sean muy dificiles de corregir ó mantener.
Si no quedara más remedio que usarlo, (y en programación estructurada SIEMPRE hay remedio) debe marcarse el destino del salto mediante un nombre seguido por dos puntos .

if( c == 0 )  goto OTRO_LADO ;.............................OTRO_LADO: printf(........
En este caso si c es cero se saltean todas las sentencias entre el if y el destino , continuandose con la ejecución del printf() . El destino puede ser tanto posterior como anterior al GOTO invocante .
 
Código: Text
  1.  
  2. #include <conio.h>
  3.  
  4. int main(void)
  5. {
  6.    int color;
  7.    char op;
  8.  
  9.    clrscr();
  10.    cprintf("Introduce un color:");
  11.    scanf("%d",&color);
  12.    textcolor(color);
  13.  
  14.    cprintf("Este es el Color seleccionadorn");
  15.    cprintf("Desea escoger otro color:rn");
  16.    cprintf("1. Sirn");
  17.    cprintf("2. Non");
  18.    scanf("%d", &op);
  19.  
  20.    if (op==1)
  21.    {
  22.        main();
  23.    }
  24.    else if (op==2){
  25.      printd("Pulse Enter para salir del programa...");
  26.     getch();
  27.     delay(2000);
  28.     printd("Hasta luego....");
  29.   }
  30. }
  31.  
  32.  
Bueno, no recuerdo mucho del C así que espero que lo acomodes, le quites o le agreges lo que necesitas, bueno.

Saludos.
Saludos

gmantil

  • Miembro MUY activo
  • ***
  • Mensajes: 121
    • Ver Perfil
sobre goto y una ayudita
« Respuesta #2 en: Lunes 10 de Marzo de 2003, 14:48 »
0
El lenguaje C es un lenguaje estructurado y modular. El uso del goto se remite a la vieja programación también llamada "espagueti". Este lenguaje asumio esta instrucción dado que fue la siguiente generación de programación después de la que te menciono. No es recomendable su uso para la programación estructurada, pues rompe las estructuras. En lo pisible y preferiblemente, debes olvidarte que existe.

Ahora, el hacer llamados el cuerpo principal o dicho de otra manera, llamar al main(() desde el mismpo programa, puede ocasionar una saturación en la pila de tu programa si estos llamados son frecuentes, pues es el mismo efecto que el llamado recursivo, donde el sistema debe guardar en la pila el contexto anterior para poder invocar el nuevo contexto y como tu tu solamente cerraras estos llamado cuando tu programa termine, tu pila va quedar cargada con todos los contextos que no puede liberar.

Mi recomendación es que utilices ciclos que encierren los módulos que quieres trabajar y que terminen cuando ya estes listo para salir.

Para eso he modificado el código tuyo solo preocupandome por mostrarte la utilicización con un ciclo do-while.

# include <stdio.h>
# include <conio.h>
main()
{
   int respuesta;
   clrscr();
   do
   {
      printf("Bienvenido a Circunferencias 1.0");
      printf("nn1.Perimetro de Circulos");
      printf("n2.Area de Circulos");
      printf("n3.Salir");
      printf("nSelecciona tu opcion:");
      scanf("%d",&respuesta);
      if (respuesta > 3)
    printf("nOpcion incorrecta");
      if (respuesta < 0)
    printf("nOpcion Incorrecta");
      if (respuesta == 1)
    perimetro();
      if (respuesta == 2)
    area();
   }while((respuesta>=1)&&(respuesta<4));
}

Hasta pronto.

gmantil