簡體   English   中英

在 C 中聲明循環/IF 結構之外的變量

[英]Declaring variables outside loop/IF structures in C

我是 C 語言的新手,而不是整體編程。 我想知道為什么當我在結構外的 if 語句中聲明要使用的變量時,我收到的輸出不正確(無論如何對於這段代碼)。

這是我的代碼:

#include<stdio.h>
void grossPay();

int main()
{
    grossPay();
}

void grossPay()
{
int rate = 10, hours;
double tax, grosspay, netpay;

printf("Enter work hours this week: ");
scanf("%d", &hours);

grosspay = hours * rate;

if (grosspay <= 300 && grosspay > 0)
{
    tax = 0.10;
    netpay = grosspay - grosspay * tax;
    printf("Pay for %d hours of week with $%d per hour\n", hours, rate);
    printf("Gross pay: $%.2f\n", grosspay);
    printf("Net pay: $%.2f\n", netpay);
}
else if (grosspay > 300 && grosspay <=1000)
{
    tax = 0.15;
    netpay = grosspay - grosspay * tax;
    printf("Pay for %d hours of week with $%d per hour\n", hours, rate);
    printf("Gross pay: $%.2f\n", grosspay);
    printf("Net pay: $%.2f\n", netpay);
}
else if (grosspay > 1000)
{
    tax = 0.25;
    netpay = grosspay - grosspay * tax;
    printf("Pay for %d hours of week with $%d per hour\n", hours, rate);
    printf("Gross pay: $%.2f\n", grosspay);
    printf("Net pay: $%.2f\n", netpay);
}
else 
{
    printf("Invalid input. Please try again.\n\n");
}
}

編輯:我放置的代碼是我沒有得到正確輸出的“修復”。 我期望當我在整個 IF 語句之外聲明 netpay 變量時,我會收到正確的輸出,與上面代碼的輸出相同。

編輯 2:以前的版本

#include<stdio.h>
void grossPay();

int main()
{
    grossPay();
}

void grossPay()
{
    int rate = 10, hours;
    double tax, grosspay, netpay;

    printf("Enter work hours this week: ");
    scanf("%d", &hours);

    grosspay = hours * rate;
    netpay = grosspay - grosspay * tax;

    if (grosspay <= 300 && grosspay > 0)
    {
        tax = 0.10;

        printf("Pay for %d hours of week with $%d per hour\n", hours, rate);
        printf("Gross pay: $%.2f\n", grosspay);
        printf("Net pay: $%.2f\n", netpay);
    }
    else if (grosspay > 300 && grosspay <=1000)
    {
        tax = 0.15;
        printf("Pay for %d hours of week with $%d per hour\n", hours, rate);
        printf("Gross pay: $%.2f\n", grosspay);
        printf("Net pay: $%.2f\n", netpay);
    }
    else if (grosspay > 1000)
    {
        tax = 0.25;
        printf("Pay for %d hours of week with $%d per hour\n", hours, rate);
        printf("Gross pay: $%.2f\n", grosspay);
        printf("Net pay: $%.2f\n", netpay);
    }
    else 
    {
        printf("Invalid input. Please try again.\n\n");
    }
}

相關代碼歸結為:

double tax;
netpay = grosspay - grosspay * tax;
tax = 0.10;
printf("Net pay: $%.2f\n", netpay);

這樣做的問題是程序中的語句是按照您編寫它們的順序執行的(至少在函數中,除非特殊的控制流語句,例如continuegoto )。

因此:

  1. 首先我們定義一個名為tax的局部變量,它是未初始化的。
  2. 然后我們將netpay設置為grosspay - grosspay * tax的結果。 這已經是錯誤的,因為tax已經在這一點上沒有定義的值,所以grosspay - grosspay * tax將產生不確定的結果。
  3. 然后我們設置tax 這對netpay的價值沒有影響。
  4. 然后我們打印netpay

事情以錯誤的順序發生。 您需要在使用變量之前設置它們。

就像你在告訴某人:

  1. 閱讀你手中的書。
  2. 指環王為例。
  3. 打開它。

你想知道為什么他們不讀指環王。

也許您正試圖消除重復代碼。 由於if塊之間的差異是稅率,您可以設置稅率並在最后進行一次計算。

#include<stdio.h>
void grossPay();

int main()
{
    grossPay();
}

void grossPay()
{
    int rate = 10, hours;
    double tax, grosspay, netpay;

    printf("Enter work hours this week: ");
    scanf("%d", &hours);

    grosspay = hours * rate;

    if (grosspay <= 300 && grosspay > 0)
    {
        tax = 0.10;
    }
    else if (grosspay > 300 && grosspay <=1000)
    {
        tax = 0.15;
    }
    else if (grosspay > 1000)
    {
        tax = 0.25;
    }
    else
    {
        printf("Invalid input. Please try again.\n\n");
        return;
    }
    netpay = grosspay - grosspay * tax;
    printf("Pay for %d hours of week with $%d per hour\n", hours, rate);
    printf("Gross pay: $%.2f\n", grosspay);
    printf("Net pay: $%.2f\n", netpay);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM