新手求解惑,while用getchar作判断条件与switch语句的问题
这是我从VC里直接拷过来的 中文有点乱码 不过应该不影响运行程序是一个简单的工资系统
用getchar函数在while语句中作判断条件
然后循环体里用switch语句
理想状态是输入1-4,程序计算出结果,然后再次出现提示界面,再次输入
错误输入情况下进入default 然后提示再次输入
只到输入5,退出循环
可实际情况是
输入1-4后,虽然会正确计算出结果,但接着又执行了default语句提示输入错误,然后才是继续输入
调试了很久也不知道问题出在哪了
#include <stdio.h>
#define A 8.75
#define B 9.33
#define C 10.00
#define D 11.20
#define tax_1 0.15
#define tax_2 0.20
#define tax_3 0.25
void ch7_8(void);
int main(void)
{
ch7_8();
return 0;
}
void ch7_8(void)
{
printf("*************************************************************************\n");
printf("Enter the number corresponding to the desired pay rate or action:\n");
printf("1) $8.75/hr 2) $9.33/hr\n");
printf("3) $10.00/hr 4) $11.20/hr\n");
printf("5) quit\n");
printf("*************************************************************************\n");
char chr;
double time;
double pay1,pay2;
while( (chr=getchar())!='5' )
{
printf("chr111=%c\n",chr);
switch(chr)
{
case '1':
printf("ÇëÊäÈ빤×÷ʱ¼ä£º");
scanf("%lf",&time);
if(time<=40.0)
pay1=time*A;
else
pay1=(40.0+(time-40.0)*1.5)*A;
if(pay1>450.0)
pay2=pay1-(300.0*tax_1+150.0*tax_2+(pay1-450.0)*tax_3);
else
{
if(pay1<=450.0 && pay1>300.0)
pay2=pay1-(300.0*tax_1+(pay1-300)*tax_2);
else
pay2=pay1-pay1*tax_1;
}
printf("ÄúµÄË°ºó¹¤×ÊΪ£º%lf\n",pay2);
break;
case '2':
printf("ÇëÊäÈ빤×÷ʱ¼ä£º");
scanf("%lf",&time);
if(time<=40.0)
pay1=time*B;
else
pay1=(40.0+(time-40.0)*1.5)*B;
if(pay1>450.0)
pay2=pay1-(300.0*tax_1+150.0*tax_2+(pay1-450.0)*tax_3);
else
{
if(pay1<=450.0 && pay1>300.0)
pay2=pay1-(300.0*tax_1+(pay1-300)*tax_2);
else
pay2=pay1-pay1*tax_1;
}
printf("ÄúµÄË°ºó¹¤×ÊΪ£º%lf\n",pay2);
break;
case '3':
printf("ÇëÊäÈ빤×÷ʱ¼ä£º");
scanf("%lf",&time);
if(time<=40.0)
pay1=time*C;
else
pay1=(40.0+(time-40.0)*1.5)*C;
if(pay1>450.0)
pay2=pay1-(300.0*tax_1+150.0*tax_2+(pay1-450.0)*tax_3);
else
{
if(pay1<=450.0 && pay1>300.0)
pay2=pay1-(300.0*tax_1+(pay1-300)*tax_2);
else
pay2=pay1-pay1*tax_1;
}
printf("ÄúµÄË°ºó¹¤×ÊΪ£º%lf\n",pay2);
break;
case '4':
printf("ÇëÊäÈ빤×÷ʱ¼ä£º");
scanf("%lf",&time);
if(time<=40.0)
pay1=time*D;
else
pay1=(40.0+(time-40.0)*1.5)*D;
if(pay1>450.0)
pay2=pay1-(300.0*tax_1+150.0*tax_2+(pay1-450.0)*tax_3);
else
{
if(pay1<=450.0 && pay1>300.0)
pay2=pay1-(300.0*tax_1+(pay1-300)*tax_2);
else
pay2=pay1-pay1*tax_1;
}
printf("ÄúµÄË°ºó¹¤×ÊΪ£º%lf\n",pay2);
break;
default:
printf("ÄúµÄÊäÈëÓÐÎó£¡\n");
break;
}
printf("*************************************************************************\n");
printf("Enter the number corresponding to the desired pay rate or action:\n");
printf("1) $8.75/hr 2) $9.33/hr\n");
printf("3) $10.00/hr 4) $11.20/hr\n");
printf("5) quit\n");
printf("*************************************************************************\n");
printf("chr222=%c\n",chr);
}
}