2017-04-02 126 views
0

我对编码相对比较陌生,目前正在学习C语言。我在教科书练习中遇到了一些麻烦,并且非常感谢您的帮助。尽管循环变量初始化和变量类型(C)

该练习的主要目标是通过输入完成的工作时间和小时费率来计算员工应该得到的总工资。费率100%可达40小时,但40小时后达到150%。下面是我写的代码:

#include <stdio.h> 

int main (void) { 
    int employee, hour, ratenormal, totalrate, counter, rate; 
    int salary; 

    hour = 1; 

    while (hour != -1) { 
     printf("Enter # of hours worked (-1 to end): "); 
     scanf_s("%d", &hour); 
     if (hour == -1) break; 

     printf("Enter hourly rate of the work ($00.00): $"); 
     scanf_s("%d", &rate); 

     if (hour <= 40) { 
      salary = hour * rate; 
     } 
     else if (hour > 40) { 
      salary = salary + ((hour - 40) * (rate * 1.5)); 
     } 

     printf("Salary is $%d\n\n", salary); 
    } 

    return 0; 
} 

我有几个问题:

1)如果我宣布变量“工资”的浮动,那么结果只打印0,这是为什么?

2)循环工作正常,但只适用于第一次迭代。问题是我需要再次初始化变量薪水,否则它会保存以前使用的一些值。我怎么能这样做?

谢谢你的帮助!

回答

1

您的问题是使用salary未初始化salary计算时间> 40小时。您可以从中得出初始化变量总是很好的。接下来,您应该简单地用40 * rate代替salary的正常费率部分,在小时> 40的工资方程中,例如

#include <stdio.h> 

int main (void) { 
    int hour = 0; 
    float rate = 0.0, salary = 0.0; 

    while (hour != -1) { 
     printf("Enter # of hours worked (-1 to end): "); 
     if (scanf ("%d", &hour) != 1) { 
      fprintf (stderr, "error: invalid hours input.\n"); 
      return 1; 
     } 
     if (hour == -1) break; 

     printf("Enter hourly rate of the work ($00.00): $"); 
     if (scanf ("%f", &rate) != 1) { 
      fprintf (stderr, "error: invalid rate input.\n"); 
      return 1; 
     } 

     if (hour <= 40) { 
      salary = hour * rate; 
     } 
     else if (hour > 40) { 
      salary = 40 * rate + ((hour - 40) * (rate * 1.5)); 
     } 

     printf("Salary is $%.2f\n\n", salary); 
    } 

    return 0; 
} 

实施例使用/输出

$ ./bin/salary2 
Enter # of hours worked (-1 to end): 20 
Enter hourly rate of the work ($00.00): $10.50 
Salary is $210.00 

Enter # of hours worked (-1 to end): 60 
Enter hourly rate of the work ($00.00): $10.50 
Salary is $735.00 

注:我已经在Linux上没有scanf_s功能(它们_s风味一个主要windoze),所以我上面使用scanf,但scanf_s将在你的情况下工作得很好。

0

printf("Salary is $%d\n\n", salary);末申报salary = 0;否则else条件不正常,你得到前值也行。

0

回答1)。声明工资作为浮子,然后打印它像这样

printf("Salary is $%.2f\n\n", salary); 

格式%.2f将打印浮子与2位小数。因此,如果工资是550.5,将打印
工资是550.50

如果我的理解问题$ 2)正确我想你想,如果你这样做来计算工资

salary = hour * rate; 
    if (hour > 40) { 
     salary = salary + ((hour - 40) * (rate * 1.5)); 
    } 

与您的代码,在第一次迭代后输入大于40的小时数,您将重新使用先前迭代的工资值。在所有情况下,您总是希望用标准费率重新计算工资值,那么如果小时数大于40,则将您加入工资的附加小时数乘以加班费率

0

如果你使用工资作为浮动,那么你必须打印

printf("Salary is $%f\n\n", salary); 
salary=0.0;