代码不会提供所需的输出或读取第二个输入

时间:2017-08-15 12:55:42

标签: c#

很抱歉,如果这不是正确的话。这是我第一次在这里发帖。我是第一年的软件学生,对于我的生活,我似乎无法让这个工作。我知道它很简单,但我很遗憾哦。我尝试使用方法这样做,但再没有帮助。也许你们可以帮助我?

问题是代码不会让我输入"你是会员(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);            
}

3 个答案:

答案 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.ReadConsole.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) {