如何解决字母及字符输入出错的问题
编译环境VC++ 6.0编写程序,要求输入一周中的工作小时数,然后打印工资总额、税金以及净工资。作如下假设:
a. 使程序提供一个选择工资等级的菜单。用switch选择工资等级。程序运行的开头应该像这样:
*****************************************************************
Enter the number corresponding to the desired pay rate or action:
1) $8.75/hr 2) $9.33/hr
3) $10.00/hr 4) $11.20/hr
5) quit
*****************************************************************
b. 加班(超过40小时)=1.5倍的时间
c. 税率 前300美元为15%
下一个150美元为20%
余下的为25%
用#define定义常量,不必关心本例是否符合当前的税法。
如果选择1到4,那么程序应该请求输入工作小时数。程序应该一直循环运行,直到输入5。如果输入1到5以外的选项,那么程序应该提醒用户合适的选项是哪些,然后再循环。
程序代码:
#include<stdio.h> #include<stdlib.h> #define TAX_RATE_FIRST 0.15 //前300美元的税率 #define TAX_RATE_NEXT 0.20 //下一个150美元的税率 #define TAX_RATE_REMAIN 0.25 //余下的税率 int main(void) { int hours,number; double pay,sum_pay,pay_hour,taxation; printf("*****************************************************************\n"); printf("Enter the number corresponding to the desired pay rate or action:\n"); printf("1) $8.75/hr \t\t\t\t2) $9.33/hr\n"); printf("3) $10.00/hr\t\t\t\t4) $11.20/hr\n"); printf("5) quit\n"); printf("*****************************************************************\n"); scanf("%d",&number); while(number!=5) //输入5退出程序 { switch(number) { case 1:pay_hour=8.75; //选择1时的基本工资 break; case 2:pay_hour=9.33; //选择2时的基本工资 break; case 3:pay_hour=10.00; //选择3时的基本工资 break; case 4:pay_hour=11.20; //选择4时的基本工资 break; default:printf("Error!Enter the number again.\n"); //其余数字为错误 scanf("%d",&number); continue; } printf("Please input your work hours in a week!\n"); scanf("%d",&hours); while(1) { if(hours<0||hours>168) //一周工作时间小于0大于168为错误时间 { printf("Error!Please enter the digital 0 to 168.\n"); scanf("%d",&hours); //重新输入小时 continue; } else if(hours<=40) //一周工作时间大于0小于等于40小时为1倍时间计算 pay=pay_hour*hours; else pay=pay_hour*(40+1.5*(hours-40)); //一周工作时间大于40小于等于168小时为1.5倍时间计算 if((pay-450)<=-150) //工资总额小于等于300美元的税金计算 taxation=pay*TAX_RATE_FIRST; else if((pay-450)<=0&&(pay-450)>-150) //工资总额大于300美元小于等于450美元的税金计算 taxation=300.00*TAX_RATE_FIRST+(pay-300.00)*TAX_RATE_NEXT; else taxation=300.00*TAX_RATE_FIRST+150.00*TAX_RATE_NEXT+(pay-450.00)*TAX_RATE_REMAIN; //工资总额大于450美元的税金计算 sum_pay=pay-taxation; //净工资为工资总额减去税金 printf("You have worded %d hours in a week.\n",hours); //打印输出结果 printf("Your pay rate is $%.4lf/hr\n",pay_hour); printf("The total pay is $%.4lf/hr\n",pay); printf("Your pay is $%.4lf and the taxation is $%.4lf.\n",sum_pay,taxation); break; } printf("*****************************************************************\n"); system("pause"); system("cls"); printf("*****************************************************************\n"); printf("*****************************************************************\n"); printf("Enter the number corresponding to the desired pay rate or action:\n"); printf("1) $8.75/hr \t\t\t\t2) $9.33/hr\n"); printf("3) $10.00/hr\t\t\t\t4) $11.20/hr\n"); printf("5) quit\n"); printf("*****************************************************************\n"); printf("Do you want to again?\nEnter \"5\" to quit, other numbers be continued.\n"); scanf("%d",&number); } printf("That's all. Thank you for using!\n"); return 0; }
输入其他都正常,输入字母或者字符就陷入死循环,如何解决?
[ 本帖最后由 小小熊宝宝 于 2010-9-27 13:16 编辑 ]