江苏省建设网站一号通,八戒网设计官网,手机怎么制作视频短片,网站怎么做最吸引人程序内容#xff1a;提供五种工资菜单#xff0c;用户自行选择#xff0c;读取用户输入的工作时长#xff0c;计算工资和净收入#xff0c;及其缴纳的税金。#xff08;C Primer Plus 第7章 第8题#xff09;程序更新#xff1a;解决输入非数字选项后退出程序的bug。这…程序内容 提供五种工资菜单用户自行选择读取用户输入的工作时长计算工资和净收入及其缴纳的税金。C Primer Plus 第7章 第8题程序更新解决输入非数字选项后退出程序的bug。 这个bug之前写程序的时候没多关注正好有时间就改过来了。 程序可执行文件工资1.3.exe9.2K · 百度网盘Ps源代码为本人亲自编写并非书内标准答案准确性需要读者自行考究。 Ps2程序如果有bug或者想提出意见可以在评论区留言至于为什么我之前更新的那些底部都是英文这就要问知乎了。首先如果要处理输入非数字不退出程序的问题就需要让程序正确读取这里使用getchar函数更容易将原本的scanf替换成getchar即可。但相应的也会多出许多麻烦第一点就是最后一次输入后缓冲区内有换行符getchar以ifu的形式将换行符读取也会造成bug为了避免这个bug 可以考虑在最后一次输入的末尾添加skip_word函数。另外getchar读取之后缓冲区还会有其他字符流所以需要跳过所有剩余的字符只读取首位。以下就是这个函数的代码int getfirst(void)
{int choice-1;choicegetchar();skip_word();return choice;
} //读取第一个字符程序源代码/*根据工作时间计算工资*/
#includestdio.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 choice0; //选择变量double wages0.0,workhour0.0,taxes0.0;//工资总额、工作时间、税金int i;//打印程序的选项界面for(i0;i64;i)printf(*);printf(nEnter the number corresponding to the desired pay rate or action:n //显示菜单提示用户输入请选择类型n1) $8.75/hrtttt2) $9.33/hrn3) $10.00/hrtttt4) $11.20/hrn5) 自定义工资时薪ttt6)quitn);for(i0;i64;i)printf(*);printf(n);while((choicegetfirst())!EOF){switch(choice){case 1:do{printf(请输入工作时长小时:n);scanf(%lf,workhour);if(worktime_test(workhour))continue;//工资总额if(workhour40) //非加班工资wagesBASEPAY1*workhour;else{workhour(workhour-40)*1.5; //去掉不算在加班内的时间wagesBASEPAY1*workhour;wages 40*BASEPAY1;}//税金计算if(wages300)taxeswages*TAX_RATE1;else if(wages450){taxes(wages-300)*TAX_RATE2;taxes45;}else{taxes(wages-450)*TAX_RATE3;taxes75;}break;}while(1);break;case 2:do{printf(请输入工作时长小时:n);scanf(%lf,workhour);if(worktime_test(workhour))continue;if(workhour40)wagesBASEPAY2*workhour;else{workhour(workhour-40)*1.5;wagesBASEPAY2*workhour;wages40*BASEPAY2;}//税金计算if(wages300)taxeswages*TAX_RATE1;else if(wages450){taxes(wages-300)*TAX_RATE2;taxes45;}else{taxes(wages-450)*TAX_RATE3;taxes75;}break;}while(1);break;case 3:do{printf(请输入工作时长小时:n);scanf(%lf,workhour);if(worktime_test(workhour)) //判断用户输入的时间是否为正确数据continue;if(workhour40)wagesBASEPAY3*workhour;else{workhour(workhour-40)*1.5;wagesBASEPAY3*workhour;wages40*BASEPAY3;}//税金计算if(wages300)taxeswages*TAX_RATE1;else if(wages450){taxes(wages-300)*TAX_RATE2;taxes45;}else{taxes(wages-450)*TAX_RATE3;taxes75;}break;}while(1);break;case 4:do{ //do while如果用户输入错误的值可以再次输入printf(请输入工作时长小时:n);scanf(%lf,workhour);if(worktime_test(workhour))continue;if(workhour40)wagesBASEPAY4*workhour;else{workhour(workhour-40)*1.5;wagesBASEPAY4*workhour;wages40*BASEPAY4;}//税金计算if(wages300)taxeswages*TAX_RATE1;else if(wages450){taxes(wages-300)*TAX_RATE2;taxes45;}else{taxes(wages-450)*TAX_RATE3;taxes75;}break;}while(1);break;case 5: //自定义工资区域wagescustom(); //自定义工资计算总工资的函数if(wages300)taxeswages*TAX_RATE1;else if(wages450){taxes(wages-300)*TAX_RATE2;taxes45;}else{taxes(wages-450)*TAX_RATE3;taxes75;}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 (worktime0){ printf(你还让老板给你打工了n);return 1;}if (worktime0){printf(不工作哪来的工资n);return 1;}return 0;
}
int hourly_wage_test(double hourly_wage)
{if (hourly_wage0){ printf(这怎么涅还倒搭钱n);return 1;}if (hourly_wage0){printf(意思白干呗n);return 1;}return 0;
}
//自定义工资 计算工资总额
double custom(void)
{double hourly_wage0.0,worktime0.0,wages0.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循环测试工作时间是否小于零wageshourly_wage*worktime;break;}while(1);return wages;
}
void skip_word(void)
{while(getchar()!n)continue;
} //跳过错误的输入字
int getfirst(void)
{int choice-1;choicegetchar();skip_word();return choice;
} //读取第一个字符Previous generation program1.2:貂猫C程序-根据时长和时薪计算工资用户自定义时薪zhuanlan.zhihu.com