-3

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

输入每周销售额:28,000
总销售额:28,000.00 美元
总工资(7%):1,960.00 美元
缴纳的联邦税:352.80 美元
缴纳的社会保障金:117.60 美元
退休金:196.00 美元
总扣除额:666.40 美元

带回家的工资:1,293.60 美元
按任意键继续。

//这是我的代码,我无法获取输入

        //Declarations

        int weeklySales;
        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;

        //Promt user for Input
        System.Console.WriteLine("What is your weekly Sales?");
        weeklySales = Console.Read();
        System.Console.ReadLine();




         //Output Display
        System.Console.Write("\nYour Weekly Sale amount is :\t\t" + weeklySales+ "\n\nGross Pay:\t\t\t\t" + grossPay+ "\n\nFed Tax \t\t\t\t" + fedTax + "\n\nRetirement\t\t\t\t"+ retirement + "\n\nSocial Security:\t\t\t" + socSecurity + "\n\nTotal Deductions:\t\t\t" + totDeductions + "\n\nMaking your take home pay:\t\t" + takeHomePay);
        System.Console.ReadLine();
4

4 回答 4

3
  weeklySales = Console.Read();

不会做你认为它做的事情。它将返回第一个字符的 ASCII 值。

反而:

  string weeklySalesText = Console.ReadLine();
  weeklySales = int.Parse(weeklySalesText );  // may need more processing.
于 2013-01-13T18:18:54.010 回答
0

您试图在将任何内容放入变量之前使用变量计算结果,这是行不通的。在计算结果之前进行输入。

于 2013-01-13T18:18:51.873 回答
0

Console.Read()不做你认为它做的事。它获取第一个新字符,并将其作为int. 它不会读取整行。此外,Console.ReadLine()之后的调用完全没有意义,因为您没有对结果做任何事情。

我认为您希望用户写一行,然后捕获该行的内容,检查它是否是 and int,如果不是,则编写错误消息并重试,如果是,则对其进行处理。

这样做是这样的:

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

代替

weeklySales = Console.Read();
System.Console.ReadLine();

有了它,之后,您可以使用它weeklySales来计算所有其他必需的变量。

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


编辑:作为我的方法如何工作的一点解释:您正在调用int.TryParse(string, out int)false如果给定的字符串不是数字,则返回,否则将其解析为 int 并返回true

您要解析为整数的是控制台输入,因此,第一个参数应该是Console.ReadLine(). weeklySales显然是您要转换的数字string,因此作为out参数提供(如果您不知道那是什么,请查看)。

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

于 2013-01-13T18:21:09.380 回答
0

正确的方法:

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.");
}
于 2013-01-13T18:26:04.000 回答