Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在猜数字游戏中使用goto语句是个坏主意吗?C#_C# - Fatal编程技术网

在猜数字游戏中使用goto语句是个坏主意吗?C#

在猜数字游戏中使用goto语句是个坏主意吗?C#,c#,C#,我对编程相当陌生。我听说使用GOTO语句是不好的。因此,如果您能给我一些建议,我将不胜感激。谢谢您的帮助 Start: Random numGen = new Random(); int num = numGen.Next(1, 101); Console.WriteLine("Guess the number between 1 and 100"); Console.Write("Your answer: ");

我对编程相当陌生。我听说使用GOTO语句是不好的。因此,如果您能给我一些建议,我将不胜感激。谢谢您的帮助

    Start:
        Random numGen = new Random();
        int num = numGen.Next(1, 101);
        Console.WriteLine("Guess the number between 1 and 100");
        Console.Write("Your answer: ");
    fail:
        int answer = Convert.ToInt32(Console.ReadLine());
        if (answer == num)
        {
            Console.WriteLine("Congratulations,the number was " + num);
            Console.WriteLine();
            goto Start;
        }

        else if (answer > num)
        {
            Console.WriteLine("Lower");
            goto fail;
        }
        else
        {
            Console.WriteLine("Higher");
            goto fail;
        }

例如,您可以将其重写为使用循环:

Random numGen = new Random();
int num = numGen.Next(1, 101);
Console.WriteLine("Guess the number between 1 and 100");
Console.Write("Your answer: ");

while(true) 
{
    int answer = Convert.ToInt32(Console.ReadLine());
    if (answer == num)
    {
        break;
    }

    if (answer > num)
    {
        Console.WriteLine("Lower");
    }
    else
    {
        Console.WriteLine("Higher");
    }
}

Console.WriteLine("Congratulations,the number was " + num);
Console.WriteLine();

我不会说Gotos“总是”一个坏主意,但只要有可能,就尽量避免它们

以下是您的代码的简化版本:

var random = new Random();
while (true)
{
    var number = random.Next(1, 101);
    Console.WriteLine("Guess the number between 1 and 100");
    Console.Write("Your answer: ");
    int answer;
    while ((answer= Convert.ToInt32(Console.ReadLine())) != number)
    {
        Console.WriteLine(answer > number ? "Lower" : "Higher");
    }
    Console.WriteLine("Congratulations,the number was " + number);
    Console.WriteLine();
}

是的,你为什么不使用方法?也许更适合这个问题。这总是一个坏主意,有很多更好的方法来组织你的代码。Goto总是一个坏主意。你的问题是基于观点的,离题的。首先,我要读一读goto声明的作用,这样你就可以自己决定它的用途谢谢你的帮助!虽然while(true)也使代码不必要地难以阅读,因为您必须找到循环中的所有断点。最好使用while来定义条件。@JanErikGunnar我也考虑过这个问题,但我真的想不出一个不重复代码的方法。我对答案做了更改,但同行评审不接受编辑。。。这里有一个建议:想一想,但是我也不太喜欢“如果(…>)或者如果(…<)”这个词。