C# 如何使程序正确执行?

C# 如何使程序正确执行?,c#,C#,这是我的代码,每次我执行我的程序,它都会正常启动并崩溃。如何解决此问题以使其正常工作 调试后,我得到以下结果:rnd无法获取局部变量或参数的值,因为它在此指令指针处不可用,可能是因为它已被优化。系统。随机 playnumber无法获取局部变量或参数的值,因为它在此指令指针处不可用,可能是因为它已被优化。int play无法获取局部变量或参数的值,因为它在此指令指针处不可用,可能是因为它已被优化。布尔 Random rnd = new Random(); int playnumber = rnd

这是我的代码,每次我执行我的程序,它都会正常启动并崩溃。如何解决此问题以使其正常工作

调试后,我得到以下结果:rnd无法获取局部变量或参数的值,因为它在此指令指针处不可用,可能是因为它已被优化。系统。随机

playnumber无法获取局部变量或参数的值,因为它在此指令指针处不可用,可能是因为它已被优化。int

play无法获取局部变量或参数的值,因为它在此指令指针处不可用,可能是因为它已被优化。布尔

Random rnd = new Random(); 
int playnumber = rnd.Next();

bool play = true; 

while (!play)
{
    Console.Write("\n\Guess a number between 1 and 20: ");
    int number = Convert.ToInt32(Console.ReadLine());

    if (number < playnumber)
    {
        Console.WriteLine("\tThe given number " + number + " is to low, try again!.");
    }

    if (number > playnumber)
    {
        Console.WriteLine("\tThe given number " + number +  " is to high, try again!.");
    }

    if (number == playnumber)
        Console.WriteLine("\tCongrats, you guessed right!");
        play = false;
Random rnd=new Random();
int playnumber=rnd.Next();
bool play=true;
当(!玩)
{
控制台。写(“\n\猜一个介于1和20之间的数字:”);
int number=Convert.ToInt32(Console.ReadLine());
如果(编号<播放编号)
{
Console.WriteLine(\t给定数字“+number+”太低,请重试!);
}
如果(编号>播放编号)
{
Console.WriteLine(\t给定的数字“+number+”太高,请重试!);
}
如果(编号==播放编号)
Console.WriteLine(“\tCongreats,你猜对了!”);
玩=假;

正如我从提供的代码中看到的;您有两个问题:

Random slumpat = new Random(); 
int speltal = slumpat.Next();

bool spela = true; 

//DONE: while (spela) - we loop while spela == true
// In your current implementation while never runs
while (spela)
{
    Console.Write("\n\Gissa på ett tal mellan 1 och 20: ");
    int tal = Convert.ToInt32(Console.ReadLine());

    if (tal < speltal)
    {
        Console.WriteLine("\tDet inmatade talet " + tal + " är för litet, försök igen.");
    }

    if (tal > speltal)
    {
        Console.WriteLine("\tDet inmatade talet " + tal +  " är för stort, försök igen.");
    }

    if (tal == speltal)
    {   //DONE: braces - you wnat to show the message AND change spela to false 

        Console.WriteLine("\tGrattis, du gissade rätt!");
        spela = false;
    }
}
Random slumbat=new Random();
int speltal=slumbat.Next();
布尔-斯佩拉=真;
//完成:while(spela)-我们在spela==true时循环
//在当前实现中,while从不运行
while(斯佩拉)
{
控制台。写(“\n\Gissa påett tal mellan 1 och 20:”;
int-tal=Convert.ToInt32(Console.ReadLine());
如果(总金额<特殊金额)
{
Console.WriteLine(“\tDet inmatde talet”+tal+“är för litet,förök igen”);
}
如果(总体>特殊)
{
Console.WriteLine(“\tDet inmatde talet”+tal+“är för stort,förök igen”);
}
如果(总==speltal)
{//DONE:brages-您可以单击以显示消息,并将spela更改为false
Console.WriteLine(“\tGrattis,du gissade rätt!”);
spela=假;
}
}

既然你说它崩溃了,我的答案只是猜测:它不是崩溃

bool play = true; 
此变量始终为
true
,因此while:

while (!play)
不会做任何事情,因为它与:

while (play == false)
这显然是永远不会实现的。节目刚刚结束

解决方案 将while更改为
while(播放)

还有这个

if (number == playnumber)
        Console.WriteLine("\tCongrats, you guessed right!");
        play = false;
应该用括号括起来

if (number == playnumber)
{
    Console.WriteLine("\tCongrats, you guessed right!");
    play = false;
}

你说的“it崩溃”到底是什么意思?您是否收到异常?如果是,异常消息和堆栈跟踪是什么?您是否调试了程序以确定其崩溃的位置?您应该提供更多信息,说明您的期望和发生的情况。然后我们可能会帮助解释为什么它没有工作让我猜一猜:它不是崩溃,只是它没有做任何事情,因为
bool spela
true
并且在检查它是否为
false
时,程序刚刚结束。这段代码有多个缺陷。它甚至可能无法编译,因为它在结尾缺少一个括号。另外,请注意最后一条if语句。
spela=false
将始终被调用,因为您缺少
{}
。除了崩溃之外,您的代码还有许多问题,您能否澄清这是您的实际代码还是传真的代码?以下是一些示例:
slumbat.Next()
将不会返回1-20范围内的数字。
spela=true
将使您的
while
-循环根本不会运行。
\Gissa
在控制台中。Write甚至不会编译,因为
\G
不是一个合法字符。虽然您的解决方案可以工作,但通过快速读取您需要的代码,它会使代码的可读性大大降低当名为“play”的字段/变量为true而非false时,期望正在玩游戏。已修复,该变量之前被称为“spela”,因此很难说出它的含义。