在 C 中的 loop/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");
}
}
编辑:我放置的代码是我 'fix' 因为没有得到正确的输出。我希望当我在整个 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");
}
}
也许您正在尝试消除重复代码。由于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);
}
相关代码归结为:
double tax;
netpay = grosspay - grosspay * tax;
tax = 0.10;
printf("Net pay: $%.2f\n", netpay);
这个问题是程序中的语句按照您编写的顺序执行(至少在函数中,除非特殊的控制流语句,例如 continue
或 goto
).
因此:
- 首先我们定义一个局部变量
tax
,它是未初始化的
- 然后我们将
netpay
设置为grosspay - grosspay * tax
的结果。这已经是错误的,因为 tax
此时没有定义的值,所以 grosspay - grosspay * tax
产生未定义的结果。
- 然后我们设置
tax
。这对 netpay
. 的值没有影响
- 然后我们打印
netpay
.
事情发生的顺序错了。使用前需要设置变量。
这就像你在告诉某人:
- 阅读手中的书。
- 拿指环王。
- 打开它。
你想知道为什么他们不读指环王。
我是 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");
}
}
编辑:我放置的代码是我 'fix' 因为没有得到正确的输出。我希望当我在整个 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");
}
}
也许您正在尝试消除重复代码。由于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);
}
相关代码归结为:
double tax;
netpay = grosspay - grosspay * tax;
tax = 0.10;
printf("Net pay: $%.2f\n", netpay);
这个问题是程序中的语句按照您编写的顺序执行(至少在函数中,除非特殊的控制流语句,例如 continue
或 goto
).
因此:
- 首先我们定义一个局部变量
tax
,它是未初始化的 - 然后我们将
netpay
设置为grosspay - grosspay * tax
的结果。这已经是错误的,因为tax
此时没有定义的值,所以grosspay - grosspay * tax
产生未定义的结果。 - 然后我们设置
tax
。这对netpay
. 的值没有影响
- 然后我们打印
netpay
.
事情发生的顺序错了。使用前需要设置变量。
这就像你在告诉某人:
- 阅读手中的书。
- 拿指环王。
- 打开它。
你想知道为什么他们不读指环王。