How goto statement works in this example?

I am studying this code sample:

class Program
{
    static void Main(string[] args)
    {
        int x = 10;
        int y = 10;

        int generate=0;

        string [,] myArrayTable = new string[x, y];

        Console.WriteLine("Enter a seek number: ");
        string cautat = Console.ReadLine();

        for (int i = 0; i < x; i++)
        {
            for(int j = 0;j < y; j++)
            {
                myArrayTable[i, j] = (generate++).ToString();
            }
        }

        for(int i=0;i<x;i++)
        {
            for(int j=0;j<y;j++)
            {
                if(cautat.Equals(myArrayTable[i,j]))
                {
                    goto Found; 
                }
            }
        }

        goto NotFound;

        Found: 
          Console.WriteLine("Numarul a fost gasit");

        NotFound:
         Console.WriteLine("Numarul nu a fost gasit !");

        Console.ReadKey();
    }
}

I do not understand why the "Not Found" statement was called and its corresponding message print on console if i enter a seek number like 10, in this case goto: Found statement is executing, so goto: NotFound statement will never be called, but still its corresponding message is printed on console, i do not understand how since in this case program never jumps to this "NotFound" label.

Please if you now give me a hand about this...

Thanks

10
задан Mircea 31 August 2010 в 16:46
поделиться

4 ответа

Eww goto, я бы использовал оператор and if/else, но если вам нужен goto:

Found: 
  Console.WriteLine("Numarul a fost gasit");
  goto End;
NotFound:
  Console.WriteLine("Numarul nu a fost gasit !");
End:
Console.ReadKey();
9
ответ дан 3 December 2019 в 17:56
поделиться

я бы переписал этот код, чтобы избежать использования goto:

string message;
if (myArrayTable.Cast<string>().Contains(cautat)) {
    message = "Found";
} else {
    message = "Not found!";
}
Console.WriteLine(message);
7
ответ дан 3 December 2019 в 17:56
поделиться

Поскольку после перехода к Found выполнение просто продолжается до следующей строки, которая оказывается строкой записи консоли "не найдено". Вам нужно добавить еще один goto, чтобы перепрыгнуть через это (или, что еще лучше, перепроектировать его, чтобы полностью избежать goto)

Это точно такая же проблема, что goto следует избегать.

0
ответ дан 3 December 2019 в 17:56
поделиться

Если вы не хотите, чтобы статусы «Не найдено» выполнялись, если выполняются статусы «Найдено», используйте другой переход, чтобы пропустить часть «Не найдено». goto переходит к разделу, но это не означает, что раздел не будет выполнен, если к нему не перейти через goto. Помните, что код выполняется сверху вниз, поэтому, если вы каким-то образом не пропустите фрагмент кода, он будет выполняться.

пример:

Found:  
    Console.WriteLine("Numarul a fost gasit"); 

goto ReadKey;

NotFound: 
    Console.WriteLine("Numarul nu a fost gasit !"); 

ReadKey:
    Console.ReadKey(); 
1
ответ дан 3 December 2019 в 17:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: