2017-04-02 111 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;