gpt4 book ai didi

c# - 控制台 : Check for Keypress (Esc)

转载 作者:行者123 更新时间:2023-11-30 23:33:06 25 4
gpt4 key购买 nike

在你标记这个之前,我已经尝试了几个在这里找到的解决方案(我发誓它不是重复的)并最终出现导致 VS 崩溃的错误。

编辑:有人说我的循环不起作用。问题不存在,它与按键有关 enter image description here

这是我的原始代码:

        while (true)
{
Console.WriteLine("Voer een getal in : ");
string invoer = Console.ReadLine();
Console.Write("Voer de macht in waarmee u wilt vermenigvuldigen :");
string macht = Console.ReadLine();

int getal = Convert.ToInt32(invoer);
int getalmacht = Convert.ToInt32(macht);

int uitkomst = (int)Math.Pow(getal, getalmacht);
Console.WriteLine("De macht van " + getal + " is " + uitkomst + " .");
Console.ReadLine();


}

它工作正常,但它没有寻找按键。

这是一个检查按键并且不会抛出错误的代码:

namespace Democonsole
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Press ESC to stop.");

do
{
while (!Console.KeyAvailable)
{

Console.WriteLine("Voer een getal in : ");
string invoer = Console.ReadLine();
Console.Write("Voer de macht in waarmee u wilt vermenigvuldigen :");
string macht = Console.ReadLine();

int getal = Convert.ToInt32(invoer);
int getalmacht = Convert.ToInt32(macht);

int uitkomst = (int)Math.Pow(getal, getalmacht);
Console.WriteLine("De macht van " + getal + " is " + uitkomst + " .");
Console.ReadLine();


}
} while (Console.ReadKey(true).Key != ConsoleKey.Escape);




}
}

但它确实在运行时崩溃并给出打印屏幕中看到的错误。

还有其他方法吗?

编辑:添加了更多我应要求尝试的解决方案示例。

    static void Main(string[] args)
{
var myWorker = new MyWorker();
myWorker.DoStuff();
Console.WriteLine("Press any key to stop...");
Console.ReadKey();
}

休息

     while (true)
{
Console.WriteLine("Voer een getal in : ");
string invoer = Console.ReadLine();
Console.Write("Voer de macht in waarmee u wilt vermenigvuldigen :");
string macht = Console.ReadLine();

int getal = Convert.ToInt32(invoer);
int getalmacht = Convert.ToInt32(macht);

int uitkomst = (int)Math.Pow(getal, getalmacht);
Console.WriteLine("De macht van " + getal + " is " + uitkomst + " .");
Console.ReadLine();
Console.Keypress()



`

最佳答案

错误信息告诉您几乎所有您需要知道的关于错误的信息,即您正在尝试将字符串转换为整数,但无法将字符串转换为整数。可能是因为它是空的。

但这只是问题的一部分,我稍后会解决。

首先,你的循环结构是错误的。只要没有按键等待读取,内部循环就会运行。但是就在循环主体的末尾,您明确地清除了控制台缓冲区的内容,因此永远不会退出内部循环。

考虑这个最小的例子:

while (!Console.KeyAvailable)
{
Console.ReadLine();
}

假设在遇到 while 语句(这将跳过整个事情)时没有等待读取的键,内部语句将从击键中累积字符,直到您按下 enter 然后返回字符作为一个字符串。几微秒后,它会检查您是否在输入后按下了另一个键,这实际上是不可能的。因此,这是一种编写无限循环的奇怪方式。

下一个问题是您要求用户输入并假设输入是有效的。不是,这就是导致您之前获得的那些异常的原因。始终假设用户将输入您的程序不希望输入的内容,并弄清楚如何处理它出错。

例如:

string invoer = Console.ReadLine();
int getal;
if (!int.TryParse(invoer, out getal))
{
Console.WriteLine("Invalid value '{0}'", invoer);
continue;
}

如果该值没有转换为数字,那么它会报错并返回到循环的开头。如果值为空,您可能还想尝试退出循环:

string invoer = Console.ReadLine();
if (string.IsNullOrEmpty(invoer))
break;
int getal;
if (!int.TryParse(invoer, out getal))
{
Console.WriteLine("Invalid value '{0}'", invoer);
continue;
}

这至少给了你一个摆脱循环的方法,而你目前还没有。

关于c# - 控制台 : Check for Keypress (Esc),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34061004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com