我试图生成一个随机数,并让用户5试图猜出正确的数字。我想比较他们的猜测并告诉他们他们是否过高或过低。 VS不会执行,我不明白为什么我会收到错误。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace NumberGuessingGame
{
class Program
{
static void Main(string[] args)
{
bool keepGoing = true;
while (keepGoing)
{
Random rnd = new Random();
int randomnumber = rnd.Next(1, 100);
//PC tells user to pick a number, display guessed number
Console.Write("Guess any integer between 1 and 100: ");
int userentry = Console.ReadLine();
{
if (int.Parse(userentry > rnd.Next))
{ Console.WriteLine($"You entered {userentry}. That's too
high. Try again.");
keepGoing = true;
}
if (int.Parse(userentry < randomnumber))
{
Console.WriteLine($"You entered {userentry}. That's too
low. Try again.");
keepGoing = true;
}
if (int.Parse(userentry = randomnumber))
{
Console.WriteLine($"You entered {userentry}. That's
right. Good job.");
keepGoing = false;
}
else (keepgoing) > 5);
{
Console.WriteLine($"You've already tried 5 times. You
lose.");
keepGoing = false;
}
else
{
Console.WriteLine("That is not a valid number.");
}
}
}
}
}
答案 0 :(得分:2)
首先Console.ReadLine();
返回一个字符串,而不是int
。如果你想从用户输入中得到一个整数,你需要转换它:
string input = Console.ReadLine();
int userentry = Convert.ToInt32(input);
第二:您将int.Parse
bool
作为参数递交。这不起作用。此外,您忘记了方法( )
背后的Next
您可以从我的帖子中获取代码并重写if语句,如下所示:
if (userentry > rnd.Next)
或者如果您想使用int.Parse
,您可以直接获取用户输入:
if (int.Parse(Console.ReadLine()) > rnd.Next())
第三:这一行:
else (keepgoing) > 5);
将被解释为单个命令。 else语句没有条件部分。由于编译器会将其解释为代码行,因此它会告诉您,您正在尝试将bool
与int
进行比较,但这不起作用!
简而言之:你应该采取这个条件将你的循环中的循环中断,并且你的程序将会非常缩短。到目前为止,您在循环中不必要地重写相同的步骤。这使得循环obosolete。
Random rnd = new Random();
int randomnumber = rnd.Next(1, 100);
int allowed_attemps = 5;
while (allowed_attemps > 0)
{
//PC tells user to pick a number, display guessed number
Console.Write("Guess any integer between 1 and 100: ");
string input = Console.ReadLine();
int userentry = Convert.ToInt32(input);
if (userentry > randomnumber)
{
Console.WriteLine($"You entered {userentry}. That's too high.Try again.");
}
else if (userentry < randomnumber)
{
Console.WriteLine($"You entered {userentry}. That's too low .Try again.");
}
else
{
Console.WriteLine($"You entered {userentry}. That's right.Good job.");
break;
}
allowed_attemps--;
}
答案 1 :(得分:0)
在这个例子中,没有什么可以出错。如果你用char而不是int猜测你的程序会崩溃。但是使用此示例,如果输入无效输入,它将为零。我没有任何事可做,我猜你刚刚开始学习编程,所以我做了一个例子。
class Program
{
static void Main(string[] args)
{
int numberOfTries = 0;
bool keepGoing = true;
Random rnd = new Random();
int randomnumber = rnd.Next(1, 100);
while (keepGoing)
{
//PC tells user to pick a number, display guessed number
Console.Write("Guess any integer between 1 and 100: ");
int userentry = 0;
int.TryParse(Console.ReadLine(),out userentry);
if (numberOfTries == 5)
{
Console.WriteLine($"You've already tried 5 times. You lose.");
Console.ReadKey(); // A break, So you can see it before the application exit.
keepGoing = false;
}
if (userentry > randomnumber)
{
Console.WriteLine($"You entered {userentry}. That's too high.Try again.");
numberOfTries++;
}
if (userentry < randomnumber && randomnumber > 0)
{
Console.WriteLine($"You entered {userentry}. That's too low.Try again.");
numberOfTries++;
}
if (userentry == randomnumber)
{
Console.WriteLine($"You entered {userentry}. That's right.Good job.");
numberOfTries++;
}
else if(userentry == 0)
{
Console.WriteLine("That is not a valid number.");
}
}
}
}
}
答案 2 :(得分:0)
其他一些杂项问题:
if (int.Parse(userentry = randomnumber))
这是作业,不是比较。
从技术上讲,你编写它的方式,userentry
应该已经是一个整数。当然,你正在尝试为它分配一个字符串,但它仍然假设是一个int。
此外,==
是一个布尔表达式,而不是你可以解析为int的东西。此外,if (int.Parse....)
从根本上说没有意义;想一想 - 例如if (10)...
会是什么意思?
另外,你真的不应该每次都调用int.Parse
- 只需解析一次并将其存储在一个变量中。
第三,你应该在这里实际使用int.TryParse
,以防用户输入不是整数的东西。现在,程序将崩溃。
对于这样的情况,您应该从第一个编译错误开始并尝试一次解决一个。请确保您特别注意错误消息的实际文本。我建议你看一下How to Debug Small Programs。