如何解决字母及字符输入出错的问题
编译环境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 编辑 ]









