C# 读取和处理输入

C# 读取和处理输入,c#,visual-studio-2010,C#,Visual Studio 2010,编写一个程序,计算并显示委托销售员工扣除后的实得工资。该员工获得其总销售额的7%作为其总工资。他或她的联邦税率是18%。他或她为自己的退休计划缴纳10%,为社会保障缴纳6%。使用下面步骤2中提供的处理逻辑作为指导。程序的输出应如下所示: Enter weekly sales: 28,000 Total sales: $28,000.00 Gross pay (7%): $1,960.00 Federal tax paid: $352.80 Social security paid:

编写一个程序,计算并显示委托销售员工扣除后的实得工资。该员工获得其总销售额的7%作为其总工资。他或她的联邦税率是18%。他或她为自己的退休计划缴纳10%,为社会保障缴纳6%。使用下面步骤2中提供的处理逻辑作为指导。程序的输出应如下所示:

Enter weekly sales: 28,000 Total sales: $28,000.00 Gross pay (7%): $1,960.00 Federal tax paid: $352.80 Social security paid: $117.60 Retirement contribution: $196.00 Total deductions: $666.40 Take home pay: $1,293.60 Press any key to continue.
在将任何内容放入变量之前,您试图使用该变量计算结果,这是行不通的。在计算结果之前进行输入

  weeklySales = Console.Read();
不会做你认为它会做的事。它将返回第一个字符的ASCII值

相反:

  string weeklySalesText = Console.ReadLine();
  weeklySales = int.Parse(weeklySalesText );  // may need more processing.
控制台。阅读不会做你认为它能做的事。它获取第一个新字符,并将其作为int返回。它不会读取整行。此外,之后的Console.ReadLine调用完全没有意义,因为您没有对结果进行任何操作

  weeklySales = Console.Read();
我认为您希望用户编写一行,然后捕获该行的内容,检查它是否为和int,如果不是,则编写一条错误消息并重试,如果是,则处理它

这是这样做的:

while (!int.TryParse(Console.ReadLine(), out weeklySales))
{
    Console.WriteLine("Input was not a number.");
}
替换

weeklySales = Console.Read();
System.Console.ReadLine();
这样之后,您就可以使用weeklySales来计算所有其他必需的变量

此外,开始时的定义也不应该起作用,因为weeklySales在开始时没有初始化

编辑:作为对我的方法工作原理的一点解释:调用int.TryParsestring,out int,如果给定字符串不是数字,则返回false,否则将其解析为int并返回true

要解析为整数的是控制台输入,因此,第一个参数应该是console.ReadLine。weeklySales显然是您希望将字符串转换为的数字,因此,如果您不知道该数字是什么,它将作为out参数提供

如果int.TryParse返回false并因此失败,我们将运行while循环通知用户,然后再次询问。如果没有,那么我们继续程序。

正确的方法:

Int32 weeklySales = 0;

while (weeklySales.Equals(0))
{
    Console.WriteLine("What are your weekly sales?");
    String input = Console.ReadLine();

    try
    {
        weeklySales = Int32.Parse(input);
    }
    catch
    {
        Console.WriteLine("There is an error in your input, try again!");
    }
}

Double grossPay = weeklySales * .07;
Double fedTax = grossPay * .18;
Double retirement = grossPay * .1;
Double socSecurity = grossPay * .06;
Double totDeductions = socSecurity + retirement + fedTax;
Double takeHomePay = grossPay - totDeductions;

Console.Write("\nYour Weekly Sale amount is :" + weeklySales + "$\nGross Pay: " + grossPay + "$\nFed Tax: " + fedTax + "$\nRetirement: " + retirement + "$\nSocial Security: " + socSecurity + "$\nTotal Deductions: " + totDeductions + "$\nMaking your take home pay: " + takeHomePay + "$");
Console.Read();
简易方法:

Console.WriteLine("What are your weekly sales?");

try
{
    Int32 weeklySales = Int32.Parse(Console.ReadLine());

    Double grossPay = weeklySales * .07;
    Double fedTax = grossPay * .18;
    Double retirement = grossPay * .1;
    Double socSecurity = grossPay * .06;
    Double totDeductions = socSecurity + retirement + fedTax;
    Double takeHomePay = grossPay - totDeductions;

    Console.Write("\nYour Weekly Sale amount is :" + weeklySales + "$\nGross Pay: " + grossPay + "$\nFed Tax: " + fedTax + "$\nRetirement: " + retirement + "$\nSocial Security: " + socSecurity + "$\nTotal Deductions: " + totDeductions + "$\nMaking your take home pay: " + takeHomePay + "$");
    Console.Read();
}
catch
{
    Console.WriteLine("There is an error in input. Program will be terminated.");
}


我在获取输入方面遇到了困难,这也不是对您的问题的有用描述。我认为您逐字逐句地向我们提供了问题陈述,并且您将代码泼洒在我们面前进行研究。这不是这个网站的工作方式。请提出具体问题。至少明确说明您的问题…我为没有正确发布此信息表示歉意。这是我第一次来这里。基本上,我很难询问用户每周销售额是多少,并将数据存储到weeklySales中,以便开始计算过程。至少我认为我唯一的问题是,我可能错了。没错,但输入逻辑也不正确。我明白了。我应该移动//提示用户到topweeklySales是一个int。不过剩下的代码很好。对。掩盖了这一点,现在修复了。那么你暗示我应该以字符串形式声明weeklySales?让我试试你的代码片段注意字符串是一个额外的中间变量。@user1974606不,他不是,他只是说你应该创建一个临时变量WeeklysalText,它应该是一个字符串。你知道。。。没有人强迫你在我回复的每一个帖子上都跟着我,只是为了批评我的代码,因为你没有更好的事情要做^ ^哈哈。老实说,伙计,信不信由你,这都是纯粹的巧合,我昨天看到你在我发的同一个问题上发帖,今天两次。我想我们是在互相关注,哈哈。答案现在好一些了。顺便说一句,扎拉索斯你是个天才,我的朋友。你的帮助使我的代码工作。非常感谢你。但这是我上C课的第一周,我认为我还不应该用WHILES。我是说对于初学者来说,有没有更简单的方法perspective@user1974606如果这是你的第一个星期伴侣,那么你可以忘记我的答案,因为那将太超前了。我建议看看亨克霍特曼的答案!如何使用美元符号格式化货币。对于我所有的推断结果,我必须在哪里插入它呢?因此我应该重新安排顶部的提示和下面的声明?@user1974606首先你应该声明int weeklySales,然后用int.TryParse在while循环中插入我的代码,然后根据weeklySales进行所有其他计算。谢谢你的详细解释,它确实有助于: