Перейти - не входит в сферу (C #) - PullRequest
0 голосов
/ 10 июня 2018

Я очень новичок в коде.Может ли кто-нибудь простым способом объяснить, почему я не могу использовать такой оператор goto, чтобы код начинался заново?Или как это можно было сделать правильно?А также, почему я получаю сообщение об ошибке при использовании «статического».** "Нет такой метки" Старт "в рамках статистики goto" "Статический модификатор недопустим для этого элемента"

using System;


namespace ConsoleApp3
{
    class Program
    {
        static void Main(string[] args)
        {
            Start:

            Random numberGenerator = new Random();

            int num1 = numberGenerator.Next(1,11);
            int num2 = numberGenerator.Next(1, 4);


            Console.WriteLine("What is " + num1 + " times " + num2 + "?");


            int svar = Convert.ToInt32(Console.ReadLine());

            if (svar == num1 * num2)
            {
                Console.WriteLine("well done!");
            }
            else
            {
                int responseIndex = numberGenerator.Next(1, 4);

                switch (responseIndex)
                {
                    case 1:
                        Console.WriteLine("Wrong, try again? [Y or N]");
                        AskUser();
                        break;
                    case 2:
                        Console.WriteLine("The answer was incorrect");
                        AskUser();
                        break;
                    default:
                        Console.WriteLine("You can do better than that");
                        AskUser();
                        break;
                }



                 static void AskUser() {
                    string jaellernei = Console.ReadLine().ToUpper();
                    if (jaellernei == "Y")
                    {
                     goto Start;
                    } else
                    {
                        return;
                    } }
            }


        }
    }
}

Ответы [ 3 ]

0 голосов
/ 10 июня 2018

Не используйте goto, если вы НЕ ДОЛЖНЫ to!и, как сказал @Marc Gravell, допустимо в одном методе.

В качестве альтернативы: вы можете создать метод кода, который вы использовали в методе Main, а затем вызвать его из обоих,Основной метод и другой метод, в котором вы использовали оператор goto.Нравится:

 using System;
namespace ConsoleApp3
{
    class Program

    {

        static void Main(string[] args)
        {
             someFunction();
        }


        static void someFunction()
        {
            Random numberGenerator = new Random();

            int num1 = numberGenerator.Next(1, 11);
            int num2 = numberGenerator.Next(1, 4);


            Console.WriteLine("What is " + num1 + " times " + num2 + "?");


            int svar = Convert.ToInt32(Console.ReadLine());

            if (svar == num1 * num2)
            {
                Console.WriteLine("well done!");
            }
            else
            {
                int responseIndex = numberGenerator.Next(1, 4);

                switch (responseIndex)
                {
                    case 1:
                        Console.WriteLine("Wrong, try again? [Y or N]");
                        AskUser();
                        break;
                    case 2:
                        Console.WriteLine("The answer was incorrect");
                        AskUser();
                        break;
                    default:
                        Console.WriteLine("You can do better than that");
                        AskUser();
                        break;
                }
            }
        }

        static void AskUser()
        {
            string jaellernei = Console.ReadLine().ToUpper();
            if (jaellernei == "Y")
            {
                someFunction();
            }
            else
            {
                return;
            }
        }


    }
}
0 голосов
/ 10 июня 2018

Вы могли бы сделать это так

public static Random randd = new Random();
public static void FlachCards()
{
Start:

    if (AskAUser() == "Y")
    {
        goto Start;
    }

}
public static String AskAUser()
{
    Console.WriteLine("Enter Y to play again");
    return Console.ReadLine();
}
0 голосов
/ 10 июня 2018

Во-первых, ваш метод AskUser неправильно вложен в другой метод - удалите его.

Во-вторых: goto допустим только в пределах одного метода ;вы можете перемещаться по одному кадру стека - вы не можете переходить между кадрами стека.

В-третьих: сколько раз вы должны использовать goto ... ну, это не так вполне ноль, но оно асимптотически приближается к нулю .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...