Este sitio web usa cookies de terceros para analizar el tráfico y personalizar los anuncios. Si no está de acuerdo, abandone el sitio y no siga navegando por él. ×


2.3. Saltar a otro punto del programa: goto

El lenguaje C# también permite la orden "goto", para hacer saltos incondicionales. Su uso indisciplinado está muy mal visto, porque puede ayudar a hacer programas llenos de saltos, muy difíciles de seguir. Pero en casos concretos puede ser muy útil, por ejemplo, para salir de un bucle muy anidado (un "for" dentro de otro "for" que a su vez está dentro de otro "for": en este caso, "break" sólo saldría del "for" más interno). Al igual que ocurría con la orden "break", será preferible replantear las condiciones de forma más natural, y no utilizar "goto".

El formato de "goto" es

   goto donde;

y la posición de salto se indica con su nombre seguido de dos puntos (:)

   donde:

como en el siguiente ejemplo:

// Ejemplo_02_03a.cs
// "for" y "goto"
// Introducción a C#, por Nacho Cabanes

using System;

public class Ejemplo_02_03a
{
    public static void Main()
    {
        int i, j;

        for (i=0; i<=5; i++)
            for (j=0; j<=20; j=j+2)
            {
                if ((i==1) && (j>=7)) 
                    goto salida;
                Console.WriteLine("i vale {0} y j vale {1}.", i, j);
            }

        salida:
            Console.Write("Fin del programa");

    }
}

El resultado de este programa es:

  i vale 0 y j vale 0.
  i vale 0 y j vale 2.
  i vale 0 y j vale 4.
  i vale 0 y j vale 6.
  i vale 0 y j vale 8.
  i vale 0 y j vale 10.
  i vale 0 y j vale 12.
  i vale 0 y j vale 14.
  i vale 0 y j vale 16.
  i vale 0 y j vale 18.
  i vale 0 y j vale 20.
  i vale 1 y j vale 0.
  i vale 1 y j vale 2.
  i vale 1 y j vale 4.
  i vale 1 y j vale 6.
  Fin del programa

Vemos que cuando i=1 y j>=7, se sale de los dos "for".

Ejercicios propuestos:

Ejercicio propuesto 2.3.1: Crea un programa que escriba los números del 1 al 10, separados por un espacio, sin avanzar de línea. No puedes usar "for", ni "while", ni "do..while", sólo "if" y "goto".