c++输入错误重新输入_C程序-根据时长和时薪计算工资1.3(解决输入非数字选项退出的bug)...

c51f2762904e5e6251ddd5223720ef72.png

程序内容:

提供五种工资菜单,用户自行选择,读取用户输入的工作时长,计算工资和净收入,及其缴纳的税金。(C Primer Plus 第7章 第8题)

程序更新:解决输入非数字选项后退出程序的bug。

这个bug之前写程序的时候没多关注,正好有时间,就改过来了。

程序可执行文件:

工资1.3.exe
9.2K
·
百度网盘

Ps:源代码为本人亲自编写,并非书内标准答案,准确性需要读者自行考究。

Ps2:程序如果有bug或者想提出意见,可以在评论区留言,至于为什么我之前更新的那些底部都是英文,这就要问知乎了。


首先,如果要处理输入非数字不退出程序的问题,就需要让程序正确读取,这里使用getchar函数更容易,将原本的scanf替换成getchar即可。

但相应的,也会多出许多麻烦,第一点就是最后一次输入后,缓冲区内有换行符,getchar以ifu的形式将换行符读取,也会造成bug,为了避免这个bug ,可以考虑在最后一次输入的末尾,添加skip_word函数。

另外,getchar读取之后,缓冲区还会有其他字符流,所以需要跳过所有剩余的字符,只读取首位。

以下就是这个函数的代码:

int getfirst(void)
{int choice=-1;choice=getchar();skip_word();return choice;
}	//读取第一个字符

程序源代码:

/*根据工作时间,计算工资*/
#include<stdio.h>
//基本工资等级
#define BASEPAY1 8.75
#define BASEPAY2 9.33
#define BASEPAY3 10.00
#define BASEPAY4 11.20
//税率
#define TAX_RATE1 0.15
#define TAX_RATE2 0.20
#define TAX_RATE3 0.25int worktime_test(double worktime);	//测试工作时间数据是否大于零的函数原型
int hourly_wage_test(double hourly_wage);	//测试时薪是否正常
double custom(void);
void skip_word(void);		//跳过多余的输入
int getfirst(void);	//读取第一个输入
int main()
{int choice=0;	//选择变量double wages=0.0,workhour=0.0,taxes=0.0;//工资总额、工作时间、税金int i;//打印程序的选项界面for(i=0;i<=64;i++)printf("*");printf("nEnter the number corresponding to the desired pay rate or action:n"	//显示菜单,提示用户输入"请选择类型n""1) $8.75/hrtttt2) $9.33/hrn""3) $10.00/hrtttt4) $11.20/hrn""5) 自定义工资(时薪)ttt6)quitn");for(i=0;i<=64;i++)printf("*");printf("n");while((choice=getfirst())!=EOF){switch(choice){case '1':do{printf("请输入工作时长(小时):n");scanf("%lf",&workhour);if(worktime_test(workhour))continue;//工资总额if(workhour<=40)	//非加班工资wages=BASEPAY1*workhour;else{workhour=(workhour-40)*1.5;	//去掉不算在加班内的时间wages=BASEPAY1*workhour;wages += 40*BASEPAY1;}//税金计算if(wages<=300)taxes=wages*TAX_RATE1;else if(wages<=450){taxes=(wages-300)*TAX_RATE2;taxes+=45;}else{taxes=(wages-450)*TAX_RATE3;taxes+=75;}break;}while(1);break;case '2':do{printf("请输入工作时长(小时):n");scanf("%lf",&workhour);if(worktime_test(workhour))continue;if(workhour<=40)wages=BASEPAY2*workhour;else{workhour=(workhour-40)*1.5;wages=BASEPAY2*workhour;wages+=40*BASEPAY2;}//税金计算if(wages<=300)taxes=wages*TAX_RATE1;else if(wages<=450){taxes=(wages-300)*TAX_RATE2;taxes+=45;}else{taxes=(wages-450)*TAX_RATE3;taxes+=75;}break;}while(1);break;case '3':do{printf("请输入工作时长(小时):n");scanf("%lf",&workhour);if(worktime_test(workhour))	//判断用户输入的时间是否为正确数据continue;if(workhour<=40)wages=BASEPAY3*workhour;else{workhour=(workhour-40)*1.5;wages=BASEPAY3*workhour;wages+=40*BASEPAY3;}//税金计算if(wages<=300)taxes=wages*TAX_RATE1;else if(wages<=450){taxes=(wages-300)*TAX_RATE2;taxes+=45;}else{taxes=(wages-450)*TAX_RATE3;taxes+=75;}break;}while(1);break;case '4':do{										//do while如果用户输入错误的值,可以再次输入printf("请输入工作时长(小时):n");scanf("%lf",&workhour);if(worktime_test(workhour))continue;if(workhour<=40)wages=BASEPAY4*workhour;else{workhour=(workhour-40)*1.5;wages=BASEPAY4*workhour;wages+=40*BASEPAY4;}//税金计算if(wages<=300)taxes=wages*TAX_RATE1;else if(wages<=450){taxes=(wages-300)*TAX_RATE2;taxes+=45;}else{taxes=(wages-450)*TAX_RATE3;taxes+=75;}break;}while(1);break;case '5':			//自定义工资区域wages=custom();	//自定义工资计算总工资的函数if(wages<=300)taxes=wages*TAX_RATE1;else if(wages<=450){taxes=(wages-300)*TAX_RATE2;taxes+=45;}else{taxes=(wages-450)*TAX_RATE3;taxes+=75;}break;case '6':goto out;default:printf("请输入正确的选项:n");continue;}printf("您的工资总额为:t%.3lf dollarn税金为:tt%.3lf dollarn净收入为:t%.3lf dollarn",wages,taxes,wages-taxes);skip_word();}
out:printf("再见n");return 0;
}//测试用户输入工作时长是否大于零的函数
int worktime_test(double worktime)
{if (worktime<0){	printf("你还让老板给你打工了?n");return 1;}if (worktime==0){printf("不工作哪来的工资?n");return 1;}return 0;
}
int hourly_wage_test(double hourly_wage)
{if (hourly_wage<0){	printf("这怎么涅,还倒搭钱?n");return 1;}if (hourly_wage==0){printf("意思白干呗?n");return 1;}return 0;
}
//自定义工资 计算工资总额
double custom(void)
{double hourly_wage=0.0,worktime=0.0,wages=0.0;do{printf("请输入您的时薪:n");if(!(scanf("%lf",&hourly_wage)==1)){	skip_word();continue;}if(hourly_wage_test(hourly_wage))continue;do{printf("请输入您工作的时间:n");scanf("%lf",&worktime);//if(worktime_test(worktime))//	continue;}while(worktime_test(worktime));	//while循环测试工作时间是否小于零wages=hourly_wage*worktime;break;}while(1);return wages;
}  
void skip_word(void)	
{while(getchar()!='n')continue;
}   //跳过错误的输入字
int getfirst(void)
{int choice=-1;choice=getchar();skip_word();return choice;
}	//读取第一个字符

Previous generation program1.2:

貂猫:C程序-根据时长和时薪计算工资(用户自定义时薪)​zhuanlan.zhihu.com
c9867ef2f6ab9bde430b90696df9bd93.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563435.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 安装 交换分区大小,给已安装的Linux新增Swap交换分区

跟了我5年多的本本已步入花甲&#xff0c;CPU严重老化&#xff0c;运行Windows异常吃力&#xff0c;于是考虑换成Linux试试。忙活了一天&#xff0c;测试了2个“家用”Linux发行版,一个是深度的Linux Deepin 2013,另一个是雨林木风的StartOS 5.1。在测试过程中也遇到一些有用的…

linux音频驱动修复工具,Linux声卡驱动(4)——音频驱动实战

一、应用测试工具的使用1.在external/tinyalsa下有以C语言实现的alsa的测试程序&#xff0c;编译后生成tinypcminfo tinyplay tinycap tinymix 四个elf格式的测试工具(1) tinypcminfo &#xff1a;获取PCM In和PCM# tinypcminfo -D /dev/snd/controlC0# tinypcminfo -D /dev/sn…

二元相图软件_FactSage 软件教程 入门学习资料汇总

&#xff08;一&#xff09;英文版的学习资料&#xff08;1&#xff09;FactSage官网&#xff1a;http://www.factsage.com/打开FactSage官网&#xff0c;如下图所示&#xff0c;点击左侧FactSage界面上的模块按钮即可查看其使用方法。点击右侧的链接"Free FactSage Demo …

bufferreader readline一次读一行_python中read(),readline(),readlines()的区别

读取文件的三个方法&#xff1a;read()、readline()、readlines()。三种方法均可接受一个变量size&#xff0c;用于限制每次读取的数据量&#xff0c;也就是说从文件当前位置起读取size个字节&#xff1b;若无参数size&#xff0c;则表示读取至文件结束为止。接下来总结下三种读…

固定 顶部_一楼小院想建阳光房?固定的怕违建,那这样可伸缩的阳光房怎么样...

今天小编又有一个新鲜出炉的案例要跟大家分享啦&#xff01;前几次与大家分享的都是伸缩阳光房顶&#xff0c;不论是手动还是电动款式 &#xff0c;似乎都是针对天井、下沉式庭院等设计的。那针对一些小区里的一楼小院&#xff0c;固定的怕违建&#xff0c;有没有什么对策呢&am…

C语言坐标打飞机,C语言控制台实现打飞机小游戏

本文实例为大家分享了C语言实现打飞机小游戏的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下初学C语言总觉得不能做些什么好玩的&#xff0c;这个小游戏只需 “一点点” (千真万确)C语言知识就能完成&#xff01;总计不到200行的非空白代码(没有强行压缩行数)操作说…

合同相似可逆等价矩阵的关系及性质_行列式的性质问题

行列式的学习一方面要掌握计算行列式的一般方法&#xff1b;对性质要理解。考点与要求&#xff1a;了解&#xff1a;行列式的概念、方阵的乘积、行列式的性质&#xff1b;掌握&#xff1a;行列式的性质&#xff1b;会用&#xff1a;行列式的性质和行列式按行(列)展开定理计算行…

c++ windows 蓝牙库_蓝牙翻页笔(PPT 控制器) | ESP32学习之旅-Arduino版

本系列历史文章目录&#xff1a;ESP32概述与Arduino软件准备新冠肺炎疫情数据实时显示器B 粉计数器本期给大家带来的案例是&#xff1a;蓝牙翻页笔。先来看一下演示视频吧&#xff1a;蓝牙翻页笔 | PPT播放控制器 | 蓝牙键盘 | 用 Arduino 玩转掌控板 ESP32 / ESP8266 | 图形化…

python 程序运行在阿里云主机_阿里云主机Access key利用工具

简介&#xff08;Gamma实验室核心成员&#xff1a;一灯老和尚所写&#xff09;在日常渗透过程中我们经常遇到信息泄露出ALIYUN_ACCESSKEYID与ALIYUN_ACCESSKEYSECRET&#xff08;阿里云API key&#xff09;&#xff0c;特别是laravel框架得debug信息。APP中也会泄露这些信息&am…

一张纸厚度是多少毫米_一张纸的威力有多大?纸折103次捅破宇宙,理论荒诞却无法反驳...

【图文摘自网络&#xff0c;如有侵权请联系删除】人类达到月球需要多久时间&#xff1f;地球和月亮的距离不是一成不变的&#xff0c;它有着近地点和远地点&#xff0c;地球里月球最远的距离在363300千米&#xff0c;最远为405500千米。而当年阿波罗号由火箭发射到登陆月球表面…

oracle 两表两列数据对比_Oracle、PostgreSQL与Mysql数据写入性能对比

最近因为工作需要&#xff0c;需要对Oracle和Mysql写入性能进行对比&#xff0c;以前都是听说Mysql性能比Oracle不是一个级别&#xff0c;现在亲测后&#xff0c;不比不知道&#xff0c;一比吓一跳。。。追加PostgreSql性能测试数据测试场景本地电脑(单机)&#xff0c;通过程序…

锐驰机器人的市场_【年终盘点】2020年,锐驰的王炸新品!

点击蓝字关注我哦辛苦付出、苦熬实干&#xff0c;换来了硕果累累、丰收成片。回首2020年&#xff0c;锐驰秉承着锐意进取、快速创新的理念&#xff0c;在自动化道路上不断探索&#xff0c;推出了多款智能自动化机器&#xff0c;现在着重介绍以下3款&#xff1a;异型插件机器人、…

学生管理系统c#语言代码,基于C#语言的学生管理系统的设计(ASP.NET2.0)

摘 要随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。学生管理系统是学校管理中不可少的一部分。而基于B/S架构的学生管理系统是方便学校管理&#xff0c;实行电子办公的必要组成部分&#xf…

异常信息_一个针对异常信息通知的springboot starter

前言作为后端开发者&#xff0c;项目上线之后难免会遇到各种问题&#xff0c;一个良好且及时的异常通知机制可以让我们在项目的维护上避免很多不必要的麻烦。本项目的开发愿景是为了给使用者在线上项目的问题排查方面能够带来帮助&#xff0c;简单配置&#xff0c;做到真正的开…

2使用教学_建水三中智能交互式液晶一体机设备投入使用

“张老师&#xff0c;一体机的使用会了吗&#xff1f;”“一体机在教学中好用吗&#xff1f;”“告别多年粉笔加黑板的教学方式&#xff0c;不用再吸入粉笔灰了。”2月25日清晨&#xff0c;建水三中的老师们议论纷纷&#xff0c;大家关注的是如何操作使用教室里安装的一体机。建…

数据结构折半查找算法C语言,数据结构C语言实现----折半查找

运行结果&#xff1a;代码如下&#xff1a;#include//数组初始化函数void Array_get(int array[],int max){printf("请输入一个数组&#xff0c;大小从低到高&#xff0c;各个数字间以空格隔开&#xff1a;");for (size_t i 0; i < max; i){scanf("%d"…

生活中的算法的实际举例_驾校学的技术,在实际生活中,你能运用自如吗?

学驾照的过程不用说&#xff0c;每一个经历过的人都有着刻骨铭心的记忆。很多人认为自己流了很多汗水&#xff0c;付出了很多精力在练车场上摸爬滚打&#xff0c;这下肯定把驾驶技术给夯实了&#xff0c;以后开车上路一点问题也没有。但是事情真的是这样吗&#xff0c;驾校学的…

470p 更换固态硬盘_联想G510换固态硬盘遇到的问题

唉&#xff01;更正一下吧&#xff01;电脑识别光驱位机械硬盘没有成功&#xff0c;出现了新问题&#xff0c;偶尔能识别出来&#xff0c;通常情况下不能识别出来&#xff0c;正在寻找解决办法中.........现在对于刚发表的这篇文章&#xff0c;有点惭愧&#xff01;二更&#x…

linux指针赋值原子,x86_64处理器的指针赋值是原子操作吗?

如题&#xff0c; x86_64处理器的指针赋值是原子操作吗&#xff1f;说实话我很讨厌参与讨论那些似乎不确定东西&#xff0c;倒不是说我对未知不敬畏&#xff0c;而是参与讨论的人大多数都是似懂非懂&#xff0c;对&#xff0c;我说的不确定性指的是参与讨论的人的认知的不确定&…

tecplot批量导出图片_批量导出Excel图片,用这招,半分钟干的活别人一整天完不成...

上个星期&#xff0c;我的一个同学向我求助。她是公司的HR&#xff0c;老板让她把员工信息表中的照片导出到文件夹中&#xff0c;然后打包发送给行政部的文员打印出来。她公司有5000多人&#xff0c;她复制粘贴了整整一个上午&#xff0c;才导出了200多张照片&#xff0c;而且还…