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。在测试过程中也遇到一些有用的…

诚龙网刻报错_诚龙网刻|诚龙网维全自动PXE网刻工具 V 11.0 官方版-完美软件下载...

诚龙网维全自动PXE网刻工具是款专业的网络克隆工具&#xff0c;它是一款能够帮助管网人员实现局域网系统的全盘网刻&#xff0c;无须架设DHCP和TFTP服务器&#xff0c;也无须进行GHSOT服务端设置&#xff0c;能够支持全盘网刻和单分区网刻&#xff0c;支持NF系列网卡。诚龙网刻…

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…

bfd联动 cisco_以太链路的接口备份和BFD联动

实验内容&#xff1a;要求PC1 和PC2通过R1-R2-R4这条链路作为主链路进行业务传输。R1-R3-R4这条链路作为备份链路&#xff0c;用户希望当主链路出现故障时&#xff0c;可以快速启用备份链路来承担业务的传输。实验拓扑&#xff1a;实验配置(各个接口IP配置已省略)&#xff1a;[…

Linux安装rpcbind服务,Mount挂载之CentOS 6 下安装rpcbind+nfs实现服务器间文件共享 2019-06-16...

实际项目中有用到文件共享&#xff0c;整理一下。一、安装部分基于centos6.5-mini版&#xff0c;离线安装。测试过程中为了方便关闭了防火墙。1、上传安装包将rpm安装包上传到服务器&#xff0c;如/root/packages/目录下&#xff1a;[rootcentos6-nfs-server packages]# pwd/ro…

linux支持异步io吗,Linux 异步IO

io_submit、io_setup和io_getevents示例[摘要&#xff1a;注&#xff1a;本宣布正在 io_submit、io_setup战io_getevents战LINUX上的AIO体系挪用。那有一个特别很是迥殊注重的中央——传送给io_setup的aio_context参数必需初初化为0&#xff0c;正在它的man脚册里实在有解释]注…

二元相图软件_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;则表示读取至文件结束为止。接下来总结下三种读…

linux shell express,Linux下使Shell 命令脱离终端在后台运行

在Linux下&#xff0c;如果你要执行的shell命令耗时特别长&#xff0c;并且&#xff1a;(1)你的网络不稳定&#xff0c;随时可能断网&#xff1b;或者(2)你在执行了shell命令之后必须要关闭终端软件(例如SecureCRT)。你是否遇到过这样的情况&#xff1a;从终端软件登录远程的Li…

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

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

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

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

jquery 获取键值对中最大值_jQuery的AJAX发送数据键值对

在我的aspx页面&#xff0c;我对JS是这样的&#xff1a; -jQuery的AJAX发送数据键值对$("#btnLoad").click(function() {var dataForAjax "{datakey:hello}"$.ajax({type: "POST",url: "Ajax__Demo.aspx/SendFile",data: dataForAjax…

一般最小二乘法 c语言,最小二乘法C语言的实现(7页)-原创力文档

实验三 .最小二乘法C语言的实现1.实验目的&#xff1a;进一步熟悉曲线拟合的最小二乘法。掌握编程语言字符处理程序的设计和调试技术。2.实验要求&#xff1a;输入&#xff1a;已知点的数目以及各点坐标 。输出&#xff1a;根据最小二乘法原理以及各点坐标求出拟合曲线 。3.程序…

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

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

查找整数c语言编程,关于算法:查找整数的位数

查找正整数的位数的最佳方法是什么&#xff1f;我发现了这3种基本方法&#xff1a;转换为字符串String s new Integer(t).toString();int len s.length();for循环for(long long int temp number; temp > 1;){temp/10;decimalPlaces;}对数计算digits floor( log10( numbe…

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

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

c语言课程设计2018,C语言课程设计报告(2018)——学生管理系统(17页)-原创力文档...

兰州交通大学博文学院《C语言程序设计》课 程 设 计 报 告系 别&#xff1a; 交通运输系班 级&#xff1a; 16交通运输(3)班姓 名&#xff1a;学 号&#xff1a;指导老师&#xff1a;2018年1月5日兰州交通大学博文学院交通运输系课程设计成绩评定表学生姓名班 级学 号导师姓名职…

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

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

c语言中case1 case3 n =1,(n 1)-Step Derivations on n-Groupoids: The Case n = 3

摘要&#xff1a;We define a ranked trigroupoid as a natural followup on the idea of a ranked bigroupoid. We consider the idea of a derivation on such a trigroupoid as representing a two-step process on a pair of ranked bigroupoids where the mapping d is a …

输入数字存入数组C语言,//从键盘上输入若干整数,并将其存入数组中,并统计输入数据的个...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼//从键盘上输入若干整数&#xff0c;并将其存入数组中&#xff0c;并统计输入数据的个数。#include#include#include#includeint sum_num(char [],int []);int cou_num(char [][81],int,int[]);int txt(char [][81],int);//主函数m…