| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1783 人关注过本帖
标题:做了好久 求差错 谢谢大家
只看楼主 加入收藏
zhang0852
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2016-7-7
结帖率:66.67%
收藏
已结贴  问题点数:5 回复次数:8 
做了好久 求差错 谢谢大家

做出来了   但是用程序计算的结果 和我自己用计算器算出来的结果不对啊  实在看不出来哪里错了   求差错  谢谢

#include <stdio.h>
#define AB 17850
#define CD 23900
#define EF 29750
#define HG 14875
#define KU 0.15 //未超过部分
#define RY 0.28//超出部分
int main()
{
    int a;
    double b,c,d,e,f;
    printf("请选择你的个税种类 \n");
k:    printf("1 单身  2 户主  3 已婚共有 4 已婚离异  5 退出\n");
    switch(scanf("%d",&a))
    {
        case '1':b=AB;
        break;
        case '2':b=CD;
        break;
        case '3':b=EF;
        break;
        case '4':b=HG;
        break;
        default:
        break;
    }
    printf("请输入你的税前收入\n");
    while(scanf("%lf",&c))
    {
        if(c<=b)
        d=c*KU;
        else
        d=b*KU+(c-b)*RY;
        f=c-d;
        printf("你的税前的收入为%.2lf,该缴纳税金为%.2lf,税后总收入为%.2lf\n",c,d,f);
        printf("若要继续 请继续选择你的个税种类\n");
        printf("
        
        
        
        ");
        goto k;
    }
    return 0;
}
搜索更多相关主题的帖子: 个税 double include 计算器 
2016-07-17 14:08
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:1 
switch(scanf("%d",&a))
    {
        case 1:b=AB;  //'1'是字符,而你输入的是数字,因此b没有被赋值。
        break;
        case 2:b=CD;
        break;
        case 3:b=EF;
        break;
        case 4:b=HG;
        break;
        default:
        break;
    }
2016-07-17 14:45
w238390
Rank: 1
来 自:%E6%B4%9B%E6%9D%89%E7%9F%B6
等 级:新手上路
帖 子:29
专家分:7
注 册:2016-3-21
收藏
得分:1 
回复 2楼 linlulu001
板主,‘1’不是数字吗。怎么说是字符呢

富强、民主、文明、和谐、自由、平等、
公正、法治,爱国、敬业、诚信、友善。
2016-07-18 18:09
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
char ch1='1',ch2=49,
你将上面的两个变量用%c输出,发现输出的都是1.

2016-07-18 19:02
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:1 
C语言中用单引号括起来的话就表示是字符,如果用%d输出就是对应的ASCII码,%c输出就是字符,你可以查看下ASCII码表
2016-07-19 10:22
Alien_Lee
Rank: 8Rank: 8
来 自:Linux帝国
等 级:蝙蝠侠
威 望:7
帖 子:149
专家分:739
注 册:2016-7-19
收藏
得分:1 
在switch语句中,设置将default后跳转到选择户型,是不是就清楚的知道了b到底有没有被赋值?而且也比较符合操作逻辑。

  DEBUG的过程就是进步的过程,每一个小错误都是大问题!...
2016-07-19 11:32
kii
Rank: 2
等 级:论坛游民
帖 子:4
专家分:11
注 册:2016-5-26
收藏
得分:1 
作为一个新人,我更关心这个while循环怎么理解……
while(scanf("%lf",&c))
    {
        if(c<=b)
        d=c*KU;
        else
        d=b*KU+(c-b)*RY;
        f=c-d;
        printf("你的税前的收入为%.2lf,该缴纳税金为%.2lf,税后总收入为%.2lf\n",c,d,f);
        printf("若要继续 请继续选择你的个税种类\n");
        printf("
        
        
        
        ");
        goto k;
    }

while参数c不为0就循环,难道要无限循环?…………

求解求解
2016-07-19 18:36
kii
Rank: 2
等 级:论坛游民
帖 子:4
专家分:11
注 册:2016-5-26
收藏
得分:0 
呃……不管怎么说,看到goto之后,也还是总觉得有点不对劲😁

[此贴子已经被作者于2016-7-19 18:47编辑过]

2016-07-19 18:39
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
收藏
得分:1 
以下是引用kii在2016-7-19 18:36:14的发言:

作为一个新人,我更关心这个while循环怎么理解……
while(scanf("%lf",&c))
    {
        if(c<=b)
        d=c*KU;
        else
        d=b*KU+(c-b)*RY;
        f=c-d;
        printf("你的税前的收入为%.2lf,该缴纳税金为%.2lf,税后总收入为%.2lf\n",c,d,f);
        printf("若要继续 请继续选择你的个税种类\n");
        printf("
        
        
        
        ");
        goto k;
    }

while参数c不为0就循环,难道要无限循环?…………

求解求解

试着去了解一下scanf()的返回值.  在这里, while后面的参数是scanf()的返回值,而不是c, 表示如果scanf()正确执行了,则执行while()循环,否则跳过while()循环.

scanf()函数的返回值是指如果scanf()执行了,则返回scanf()正确读入的参数的个数.否则返回0.
另外,goto是个处理跳出多重循环的很好的工具, 不要被老谭影响而惧用goto.

代码测试环境:  WinXP+C-Free5.0.
2016-07-19 21:10
快速回复:做了好久 求差错 谢谢大家
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015785 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved