如何在此代码中使用do-while替换?

问题描述 投票:-1回答:2

有没有简单的方法可以为这个程序添加“do”?需要在我的任务中有一个“做”:)

namespace Uppgift_1___Gissa_talet
{
    class Program
    {
        static void Main(string[] args)
        {
            Random randomerare = new Random();
            int slump_tal = randomerare.Next(1, 101);

            Console.WriteLine("Minigame: Gissa talet!");
            Console.WriteLine();
            Console.WriteLine("Skriv in ett tal mellan 1 och 100:");

            string str = Console.ReadLine();
            int tal = Convert.ToInt32(str);
            while (tal != slump_tal)
            {
                if (tal < slump_tal) //Är det mindre?
                {
                    Console.WriteLine("Fel! Större!");//Säg då att det ska vara större
                }
                else if (tal > slump_tal)
                {
                    Console.WriteLine("Fel! Mindre!");
                }
                tal = Convert.ToInt32(Console.ReadLine());//Läs in nästa gissning

            }
            Console.WriteLine("Grattis! Du gissade rätt!");
            Console.WriteLine("Tryck på en tangent för att avsluta...");
            Console.ReadLine();
        }
    }
}
c# do-while
2个回答
0
投票
namespace Uppgift_1___Gissa_talet
{
    class Program
    {
        static void Main(string[] args)
        {
        Random randomerare = new Random();
        int slump_tal = randomerare.Next(1, 101);

        Console.WriteLine("Minigame: Gissa talet!");
        Console.WriteLine();
        Console.WriteLine("Skriv in ett tal mellan 1 och 100:");

        string str = Console.ReadLine();
        int tal = Convert.ToInt32(str);
        do //You start the loop before the test expression is checked
        {
            if (tal < slump_tal) //Är det mindre?
            {
                Console.WriteLine("Fel! Större!");//Säg då att det ska vara större
            }
            else if (tal > slump_tal)
            {
                Console.WriteLine("Fel! Mindre!");
            }
            tal = Convert.ToInt32(Console.ReadLine());//Läs in nästa gissning

        }while(tal != slump_tal); // The test expression is checked here.

        Console.WriteLine("Grattis! Du gissade rätt!");
        Console.WriteLine("Tryck på en tangent för att avsluta...");
        Console.ReadLine();
        }
       }
}

0
投票

你所要做的就是将while移动到块的末尾(后面跟一个分号)并在块的开头添加一个do

此外,这允许您在循环内完全移动用户输入,而不是将其写入两次。唯一的问题是tal必须在循环之外定义,因为它用于while条件:

private static void Main(string[] args)
{
    int slump_tal = new Random().Next(1, 101);
    int tal;

    Console.WriteLine("Minigame: Gissa talet!\n");
    Console.WriteLine("Skriv in ett tal mellan 1 och 100:");

    do
    {
        tal = Convert.ToInt32(Console.ReadLine());

        if (tal < slump_tal)
        {
            Console.WriteLine("Fel! Större!");
        }
        else if (tal > slump_tal)
        {
            Console.WriteLine("Fel! Mindre!");
        }
    } while (tal != slump_tal);

    Console.WriteLine("Grattis! Du gissade rätt!");
    Console.WriteLine("Tryck på en tangent för att avsluta...");
    Console.ReadLine();

    GetKeyFromUser("\nDone! Press any key to exit...");
}

你可以做的另一个改进是包含一个帮助器方法来验证用户输入实际上是一个数字,这样你就不会抛出异常,如果他们输入类似“2”而不是“2”的东西。下面的方法接受一个“提示”字符串(用户的问题),并使用一个循环,其中条件使用int.TryParse来验证该条目是一个整数,并继续循环,直到它返回true,然后返回用户输入的整数:

private static int GetIntFromUser(string prompt)
{
    int input;

    do
    {
        Console.Write(prompt);
    } while (!int.TryParse(Console.ReadLine(), out input));

    return input;
}

现在我们可以使用这个方法来获取用户输入:

private static void Main(string[] args)
{
    int slump_tal = new Random().Next(1, 101);
    int tal;
    var prompt = "Skriv in ett tal mellan 1 och 100: ";

    Console.WriteLine("Minigame: Gissa talet!\n");

    do
    {
        tal = GetIntFromUser(prompt);

        prompt = tal < slump_tal
            ? "Fel! Det numret är för litet. Försök igen: "
            : "Fel! Det numret är för stort. Försök igen: ";
    } while (tal != slump_tal);

    Console.WriteLine("Grattis! Du gissade rätt!");
    Console.WriteLine("Tryck på valfri tangent för att avsluta...");
    Console.ReadLine();
}
© www.soinside.com 2019 - 2024. All rights reserved.