c# - 我没有按回车键,但 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# 的内容:-) - 请在下面找到。
强调:
- 您使用
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)
}
}
}
}
}
推荐阅读
- azure-object-anchors - Azure 对象锚点 - Azure 对象锚点支持哪些 3D 模型格式?
- octave - I want to stop the code when x is equal to 1
- shell - shell脚本读取一行并逐行处理
- python-3.x - Python - 即使存在也未检测到网络钓鱼数据集文件
- macos - 如何在文件中的任何 `{` 和 `:` 字符中添加换行符
- python - Pycharm 中的解释器设置存在问题
- c# - c# 10000 x 10000 矩阵乘法
- css - Bootstrap 4.6 容器的子级仅使用半页高度
- c++ - 在函数模板中转换为否定的一元表达式失败
- javascript - Visual Studio 代码终端显示一些我不理解的消息