C# 代码跳过了询问用户Donald是否喝了药剂的部分

C# 代码跳过了询问用户Donald是否喝了药剂的部分,c#,C#,当它到达用户被问到问题的部分时,它跳过并关闭,甚至不在最后打印Donald的统计数据。我似乎不明白为什么,即使使用read键,它也不起作用 using System; namespace ConsoleApp2 { class Donald { public static int Health = 100; public static int Damage = 50; public static int Speed = 15

当它到达用户被问到问题的部分时,它跳过并关闭,甚至不在最后打印Donald的统计数据。我似乎不明白为什么,即使使用read键,它也不起作用

using System;


namespace ConsoleApp2
{

    class Donald
    {
        public static int Health = 100;

        public static int Damage = 50;
        public static int Speed = 15;
        public static string Food;
        public static string Potion;
    }
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("What will Donald eat?: ");

            Donald.Food = Convert.ToString(Console.Read());
            Console.ReadKey();
            Console.Write("Will Donald drink a slow potion?: ");
            Donald.Potion = Convert.ToString(Console.Read());
            Console.ReadKey();
            TakeDamage();
            SlowDown();
            PrintStats();

        }

        static void TakeDamage()
        {
            if (Donald.Food == "Turkey")
            {
                Donald.Health -= 15;
            }
            if (Donald.Food == "Steak")
            {
                Donald.Health += 15;
            }
        }

        static void SlowDown()
        {
            if (Donald.Potion == "Yes")
            {
                Donald.Speed -= 50;
            }
        }

        static void PrintStats()
        {
            Console.WriteLine(Donald.Speed);
            Console.WriteLine(Donald.Potion);
            Console.WriteLine(Donald.Health);
            Console.WriteLine(Donald.Food);
            Console.WriteLine(Donald.Damage);
        }
    }
}

请研究下面的代码以了解其不同之处

要等待用户输入,请使用
ReadKey
读取用户输入用户
ReadLine
,还要注意,如果在程序结束时没有什么需要等待的,它将快速写入您的值并关闭,因为它会很快让您看到,因此您需要以某种方式停止它,再次
ReadKey
将有帮助

Console.Write("What will Donald eat?: ");   
Donald.Food = Console.ReadLine();

Console.Write("Will Donald drink a slow potion?: ");
Donald.Potion = Console.ReadLine();

TakeDamage();
SlowDown();
PrintStats();

Console.ReadKey();

更改代码,如下所示:

static void Main(string[] args)
{
    Console.Write("What will Donald eat?: ");

    Donald.Food = Console.ReadLine();

    Console.Write("Will Donald drink a slow potion?: ");
    Donald.Potion = Console.ReadLine();

    TakeDamage();
    SlowDown();
    PrintStats();

    // wait for user to exit
    Console.ReadLine();
    }
您还可以将
Console.ReadKey()
ReadLine()
放在这里:

 static void PrintStats()
 {
        Console.WriteLine(Donald.Speed);
        Console.WriteLine(Donald.Potion);
        Console.WriteLine(Donald.Health);
        Console.WriteLine(Donald.Food);
        Console.WriteLine(Donald.Damage);
        Console.ReadLine(); // ReadKey as this will be discarded.
 }
Read和ReadLine的区别如下:


尝试在类和属性上设置公共访问权限,并从console.read切换到readline您知道console.read()返回int吗?你知道那个程序会打印一些东西,但不会在打印后等待并退出吗?将Read替换为ReadLine并删除ReadKey,然后在PrintStats之后放置一个ReadKey,多亏了这些帮助。我用ReadLine代替Read。