在这段代码中,如何用do-while代替while?

时间:2019-03-07 19:31:36

标签: c# do-while

有没有简单的方法可以向该程序添加“ 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();
        }
    }
}

2 个答案:

答案 0 :(得分: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();
        }
       }
}

答案 1 :(得分: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();
}