【问题标题】:Declaring variables outside loop/IF structures in C在 C 中声明循环/IF 结构之外的变量
【发布时间】:2018-11-10 11:43:29
【问题描述】:

我是 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");
    }
}

【问题讨论】:

  • 哪个输出不正确?你期望的输出是什么?
  • 结构在哪里?
  • "OUTSIDE the structure" 你的意思是在函数之外吗?在那种情况下,我无法复制:AB
  • 我预期的输出是,当 Grosspay = 300 时,输出时 netpay = 270。相反,它是 Grosspay = 300 和 netpay = 300。我正确插入输出的代码,但这似乎有点乏味,我希望当我在 If 语句结构之外声明 netpay 变量时,我会收到正确的输出。
  • 编辑并添加了相关的代码。

标签: c variables if-statement declaration


【解决方案1】:

相关代码归结为:

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. 打开它。

你想知道他们为什么不读《指环王》。

【讨论】:

  • 感谢您如此简洁地解释它。干杯
【解决方案2】:

也许您正试图消除重复代码。由于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);
}

【讨论】:

  • 谢谢!想知道是否有任何方法可以清理我的代码。 netpay 的声明必须在 IF 语句之后而不能在它之前有什么原因吗?
猜你喜欢
  • 1970-01-01
  • 2016-02-23
  • 2015-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-23
  • 2021-04-14
相关资源
最近更新 更多