循环变量初始化和变量类型(C)

时间:2017-04-02 06:26:04

标签: c loops variables

我对编码比较陌生,目前正在学习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)如果我将变量“salary”声明为float,那么结果只会打印0.为什么会这样?

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

感谢您的帮助!

4 个答案:

答案 0 :(得分:1)

您的问题是在salary计算中使用salary 未初始化达数小时&gt;你可以从中获取初始化变量总是好的。接下来,您只需将40 * rate替换为小时&gt;中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,但是{{ 1}}在你的情况下会正常工作。

答案 1 :(得分:0)

printf("Salary is $%d\n\n", salary);的结尾声明salary = 0;否则,条件不能正常工作,您也会获得之前的价值。

答案 2 :(得分: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,则加上工资额外小时数乘以加班费

答案 3 :(得分:0)

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

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