在 C 中的循环/IF 结构之外声明变量

2023-12-31

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

这样做的问题是,程序中的语句按照您编写的顺序执行(至少在函数内,除非特殊的控制流语句,例如continue or goto).

Thus:

  1. 首先我们定义一个局部变量,名为tax,这是未初始化的。
  2. 然后我们设置netpay的结果grosspay - grosspay * tax。这已经是错误的了,因为tax此时没有定义值,所以grosspay - grosspay * tax产生未定义的结果。
  3. 然后我们设置tax。这对价值没有影响netpay.
  4. 然后我们打印netpay.

事情发生的顺序是错误的。您需要在使用变量之前设置它们。

就像你在告诉某人:

  1. 读你手里的书。
  2. Take 指环王.
  3. Open it.

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C 中的循环/IF 结构之外声明变量 的相关文章

随机推荐

  • 我想从 XML 文件加载数据并显示在列表框中?

    我有三门课 首先是人 public class Person public string FirstName get set public string LastName get set public string Email get se
  • 如何在张量流中显式广播张量以匹配另一个张量的形状?

    我有三个张量 A B and C在张量流中 A and B都是形状 m n r C是形状的二元张量 m n 1 我想根据以下值从 A 或 B 中选择元素C 显而易见的工具是tf select 但是它没有广播语义 所以我需要首先显式广播C与
  • SQL JOIN 中的重复记录

    我在 SQL 查询中得到多个结果 我有三个表 付款 信用和费用 在每个月末 我需要根据帐户持有人 我们称之为所有者 进行余额转发 我尝试了不同的查询 但不断收到重复的行 我知道这与我的WHERE条款 但我不知道如何解决它 在我的测试数据中
  • CUDA 链接错误 - Visual Express 2008 - 由于(空)配置文件导致 nvcc 致命

    在过去的两周里 我一直在广泛寻找可能的解决方案来解决我的错误 我已经成功安装了Cuda 64位编译器 工具 和SDK以及64位版本的Visual Studio Express 2008和带有Framework 3 5的Windows 7 S
  • 寻找机器人在房子里定位的方法

    我正在破解一个吸尘器机器人用微控制器 Arduino 控制它 我想要做到打扫房间时更有效率 目前 它只是直行并在碰到物体时转向 但我很难找到最佳算法或方法用于知道它在房间中的位置 我正在寻找一种既便宜 不到 100 美元 又不太复杂 不需要
  • 如何在 Fortran 中即时增加数组大小?

    我的程序通过 3D 数组运行 标记它找到的 簇 然后进行一些检查以查看是否有任何相邻簇的标签高于当前簇 还有第二个数组保存 正确的 簇标签 如果它发现第 n 个相邻簇被正确标记 则将该元素分配给 0 否则将其分配给正确的标签 例如 如果第
  • 如何在 Retrofit 请求正文中 POST 原始整个 JSON?

    这个问题之前可能已经被问过 但没有得到明确的答案 到底如何在 Retrofit 请求的正文中发布原始的整个 JSON 查看类似问题here https stackoverflow com questions 19099536 post bo
  • 使用 SSH 远程运行 Shell 脚本块

    我尝试使用 shell 脚本在不同的服务器上执行命令块 谁能帮我解决这个问题吗 while RecordCount gt 0 do expXXXXX sed n RecordCount p GUID DLT EXPR FILE cut d
  • 如何在 PHP 中检查我是否处于静态上下文中?

    有什么方法可以检查方法是静态调用还是在实例化对象上调用 请尝试以下操作 class Foo function bar static isset this this instanceof self
  • 为什么127*2换成byte结果是-2?

    这是我的代码 public class test public static void main String args byte a byte 127 b 2 byte c byte a b System out println c 为什
  • 如何让div出现在另一个div的前面?

    请参考下面的代码 ul li style height 100px div style height 500px background color black div li ul 从上面的代码我们知道我们只能看到100px高度的黑色背景 我
  • 如何使用 URL 传递 PHP 变量

    我想使用 URL 传递一些 PHP 变量 我尝试了以下代码 链接 php pass php pre code code pre
  • 神经网络发散而不是收敛

    我已经实现了一个 2 层的神经网络 使用 CUDA 每层 2 个神经元 我试图让它使用反向传播学习 2 个简单的二次多项式函数 但它没有收敛 而是发散 输出变得无穷大 以下是有关我尝试过的更多详细信息 我已将初始权重设置为 0 但由于它是发
  • 嵌套Python列表推导式来构造列表列表

    我是一个Python新手 在摸索嵌套列表理解时遇到了麻烦 我正在尝试编写一些代码来读取文件并为每行的每个字符构建一个列表 所以如果文件包含 xxxcd cdcdjkhjasld asdasdxasda 结果列表将是 x x x c d c
  • Nhibernate 中多对多集合的更新导致连接表中的多个删除

    我有一个类 其中包含一个使用 Fluent Nhibernate 映射到多对多数据库关系的集合 映射如下 Table Book Id x gt x Id Map x gt x Title Map x gt x NumberOfPages H
  • JQuery 星级评定 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 任何人都可以建议一个易于设置的简单 JQuery 五星级评级脚本 我只需要单个页面上的单个实例 我不在乎它是否写入文件或 mysql 数据库来计算评分
  • 带 Angular 的鹅毛笔表,无法在编辑模式下工作

    我有一个 Angular 应用程序 我有一个表单并使用了 quill better table https www npmjs com package quill better table https www npmjs com packa
  • WinForms:在设计器中将自定义 ToolStripMenuItem 添加到 MenuStrip

    在 Windows 窗体中如果我创建一个继承自的自定义控件ToolStripMenuItem有没有办法添加这个CustomToolStripMenuItem to MenuStrip来自设计师还是我必须通过代码来完成 自从ToolStrip
  • Scipy 中使用 NaN 值进行 T 检验

    我在 scipy 中进行 t 检验时遇到问题 这让我慢慢发疯 它应该很容易解决 但我所做的一切都不起作用 并且通过广泛的搜索也找不到解决方案 我在最新的 Anaconda 发行版上使用 Spyder 具体来说 我想比较从 csv 文件导入的
  • 在 C 中的循环/IF 结构之外声明变量

    我是 C 语言新手 总体来说是编程新手 我想知道为什么当我在结构外部的 if 语句中声明要使用的变量时 我收到的输出不正确 无论如何对于这段代码 这是我的代码 include