很抱歉,如果这不是正确的话。这是我第一次在这里发帖。我是第一年的软件学生,对于我的生活,我似乎无法让这个工作。我知道它很简单,但我很遗憾哦。我尝试使用方法这样做,但再没有帮助。也许你们可以帮助我?
问题是代码不会让我输入"你是会员(Y / N)"写作声明,只是让我输出50。
static void Main(string[] args)
{
//Local Variable Declaration//
double rate1 = 10;
double rate2 = 3;
double maxCharge = 50;
double charge;
Console.WriteLine("Enter number of hours (-999 to quit) : ");
int hoursRented = Console.Read();
if (hoursRented >= 3)
{
charge = hoursRented * rate1;
}
else
{
charge = (3 * rate1) + (hoursRented * rate2);
}
if (charge > maxCharge)
{
charge = maxCharge;
}
Console.WriteLine("Are you a member? (Y/N) : ");
int memberStatus = Console.Read();
if (memberStatus.Equals("Y"))
{
charge = (charge * 1 / 10) - charge;
}
Console.WriteLine("Customer Charge : {0} Total Charge To Date : ", charge);
}
答案 0 :(得分:0)
这是因为你只是写作:
Console.WriteLine("Are you a member? (Y/N) : ");
并继续。
你必须这样做:
Console.WriteLine("Are you a member? (Y/N) : ");
Console.ReadLine();
然后:
int memberStatus = Int.Parse(Console.ReadKey());
答案 1 :(得分:0)
你的问题是你正在使用Console.Read,它返回了@juharr在评论中所说的下一个charachter的ascii代码。所以解决方案太简单了,将Read By ReadLine替换为这样更改你的代码,以便将一个字符串ReadLine转换为你想要的int值
int hoursRented = int.Parse(Console.ReadLine());
并将您的会员状态更改为字符串,以便将其与" Y"进行比较很容易
string memberStatus = Console.ReadLine();
注意:如果你想验证输入,你应该使用int.TryParse
而不是像我使用的普通解析,因为它返回一个bool,所以你知道什么时候失败
答案 2 :(得分:0)
有问题的行在
之下5
和
Console.WriteLine("Enter number of hours (-999 to quit) : ");
int hoursRented = Console.Read();
if (hoursRented >= 3) {
当你调用Console.Read()
时,它只读取字符并将其作为int返回。您似乎错误地认为它会将角色解析为Console.WriteLine("Are you a member? (Y/N) : ");
int memberStatus = Console.Read();
if (memberStatus.Equals("Y")) {
。
其次,想一想当您提供多个字符作为单个int
调用的输入时会发生什么。有趣的是,在随后的调用中读取剩余的字符。因此,当您在第一个Console.Read()
中键入任何数字后跟Enter
时,读取第一个字符,后续字符(包括EOLN字符)将在后续调用中返回,而不是提示您输入下次通话的信息。
修复很简单。使用Console.Read
和Console.Readline()
(或其int.parse
变体
然后相应的代码如下所示
int.TryParse()
和
Console.Write("Enter number of hours (-999 to quit) : ");
string hoursRentedStr = Console.ReadLine();
int hoursRented = int.Parse(hoursRentedStr);
if (hoursRented >= 3) {