首页 > 解决方案 > 我没有按回车键,但 ReadLine() 说我做到了(不小心让你无法回答旧的,所以重新发布)

问题描述

已修复,但现在它在到达该Main();内容时会自动按 Enter,而我实际上无法及时输入任何内容。有谁知道怎么了?

using System;
using System.Linq;

namespace Bruh
{
    class Program
    {
        static void Main()
        {
            int pog = 0;
            int pog2 = 0;
            Random r = new Random();
            Console.WriteLine("Input a whole number");
            string poggers = Console.ReadLine();
            if (int.TryParse(poggers, out pog))
            {
                pog = int.Parse(poggers);
            }
            else
            {
                Console.WriteLine("ERROR: Not a number. Please input a number and not letters.");
                Console.Read();
                System.Environment.Exit(1);
            }
            Console.WriteLine("Input a number higher than the previous");
            string poggers2 = Console.ReadLine();
            if (int.TryParse(poggers2, out pog2))
            {
                pog2 = int.Parse(poggers2);
            }
            else
            {
                Console.WriteLine("ERROR: Not a number. Please input a number and not letters.");
                Console.Read();
                System.Environment.Exit(1);
            }
            int genRand = r.Next(pog, pog2);
            Console.WriteLine("This number was randomly generated between " + pog + " and " + pog2 + " and we got: " + genRand);
            Console.Read();
            Console.WriteLine("Would you like to try again? Y/N");
            ConsoleKeyInfo answer = Console.ReadKey();
            if (answer.KeyChar == 'y' || answer.KeyChar == 'Y')
            {
                Console.WriteLine("\n");
                Main();
            }
            else if (answer.KeyChar == 'n' || answer.KeyChar == 'N')
            {
                System.Environment.Exit(1);
            }
            else
            {
                Console.WriteLine("ERROR: Y/N not any other character");
                Console.Read();
                System.Environment.Exit(1);
            }
        }
    }
}

标签: c#

解决方案


我已将您的代码重新编写成更类似于 C# 的内容:-) - 请在下面找到。

强调:

  • 您使用int.TryParse()正确,但在真正的代码块内再次使用int.Parse().
  • 无需调用System.Environment.Exit(1);终止程序,让它结束。
  • 该调用main()实际上是一个递归调用——一个方法(函数)调用它自己。有时可用,但我经常导致StackOverflow异常。在这种情况下,你会得到一些奇怪的行为......
using System;

namespace Bruh2
{
    class Program
    {
        static void Main()
        {
            bool tryAgain = true;

            while (tryAgain)
            {
                int pog = 0;
                int pog2 = 0;
                Random r = new Random();

                Console.Write("Input a whole number: ");
                string poggers = Console.ReadLine();
                while (!int.TryParse(poggers, out pog))
                {
                    Console.WriteLine("ERROR: Not a number. Please input a number and not letters.");
                    poggers = Console.ReadLine();
                }

                Console.Write("Input a number higher than the previous: ");
                string poggers2 = Console.ReadLine();
                while (!int.TryParse(poggers2, out pog2))
                {
                    Console.WriteLine("ERROR: Not a number. Please input a number and not letters.");
                    poggers2 = Console.ReadLine();
                }

                int genRand = r.Next(pog, pog2);
                Console.WriteLine("This number was randomly generated between " + pog + " and " + pog2 + " and we got: " + genRand);
                Console.WriteLine();

                Console.WriteLine("Would you like to try again? Y/N");
                //ConsoleKeyInfo answer = Console.ReadKey();
                string answer = Console.ReadKey().KeyChar.ToString().ToLower();
                while (answer!="y" && answer!="n")
                {
                    Console.WriteLine("ERROR: Y/N not any other character");
                    answer = Console.ReadKey().ToString().ToLower();
                }
                if (answer == "n")
                {
                    tryAgain = false; // terminate the loop (and thereby the program)
                }
            }
        }
    }
}

推荐阅读