#include<stdio.h>
#define worktime 40
void print(void);
char choice1(void);
int time1(void);
int main(void)
{
int choice = 0;
double base = 0;
int time = 0;
double rate = 0;
char ch; double sum = 0, net = 0;
print();
printf("enter a letter for your choice:\n");
while ((choice = choice1()) != 'q')
{
switch (choice)
{
case 'a':base = 8.75; break;
case 'b':base = 9.33; break;
case 'c':base = 10.00; break;
case 'd':base = 11.20; break;
default:break;
}
printf("enter the work time:\n");
time = time1();
if (time < worktime)
sum = base*time;
else sum = base*worktime + (time - worktime)*1.5*base;
if (sum < 300)
rate = sum*0.15;
if (sum < 450 && sum>300)
rate = 300 * 0.15 + (sum - 300)*0.2;
if (sum > 450)
rate = 300 * 0.15 + (sum - 300)*0.2 + (sum - 450)*0.25;
net = sum - rate;
printf("you have wage:%f,rate:%f,net:%f\n", sum, rate, net);
printf("\n"); printf("\n"); printf("\n");
print();
printf("enter a letter for your choice:\n");
}
return 0;
}
void print(void)
{
printf("enter your choice form a to d and q is quit:\n");
printf("*******************************************************\n");
printf("pay rate or action\n");
printf("a)$8.75/hr b)$9.33/hr c)$10.00/hr\n");
printf("d)$11.20/hr q)quit\n");
printf("*******************************************************\n");
}
char choice1(void)
{
int ch;
ch = getchar();
while (getchar() != '\n')
continue;
while ((ch<'a' || ch>'d') && ch != 'q')
{
printf("please respond with a,b,c,d or q\n");
ch = getchar();
}
return ch;
}
int time1(void)
{
int time, ch;
while (scanf("%d", &time) != 1)
{
while ((ch = getchar()) != '\n')
putchar(ch);
printf(" is not an integer,please enter an integer.\n");
}
return time;
}
有没有大佬有空,帮我看看,为什么第二次输入验证会失败。研究了3天,实在头痛啊!!!
唉,都没人回答,我自己回答吧,突然灵光一动发现问题所在了.下面是正确代码,虽然写的比较乱。
#include<stdio.h>
#define worktime 40
void print(void);
char choice1(void);
int time1(void);
int getfirst(void);
int main(void)
{
int choice = 0;
double base = 0;
int time = 0;
double rate = 0;
char ch; double sum = 0, net = 0;
print();
printf("enter a letter for your choice:\n");
while ((choice = choice1()) != 'q')
{
switch (choice)
{
case 'a':base = 8.75; break;
case 'b':base = 9.33; break;
case 'c':base = 10.00; break;
case 'd':base = 11.20; break;
default:printf("program error"); break;
}
printf("enter the work time:\n");
time = time1();
if (time < worktime)
sum = base*time;
else sum = base*worktime + (time - worktime)*1.5*base;
if (sum < 300)
rate = sum*0.15;
if (sum < 450 && sum>300)
rate = 300 * 0.15 + (sum - 300)*0.2;
if (sum > 450)
rate = 300 * 0.15 + (sum - 300)*0.2 + (sum - 450)*0.25;
net = sum - rate;
printf("you have wage:%f,rate:%f,net:%f\n", sum, rate, net);
printf("\n"); printf("\n"); printf("\n");
print();
printf("enter a letter for your choice:\n");
}
return 0;
}
void print(void)
{
printf("enter your choice form a to d and q is quit:\n");
printf("*******************************************************\n");
printf("pay rate or action\n");
printf("a)$8.75/hr b)$9.33/hr c)$10.00/hr\n");
printf("d)$11.20/hr q)quit\n");
printf("*******************************************************\n");
}
char choice1(void)
{
int ch;
ch = getfirst();
while ((ch<'a' || ch>'d') && ch != 'q')
{
printf("please respond with a,b,c,d or q\n");
ch = getfirst();
}
return ch;
}
int time1(void)
{
int time, ch;
while (scanf("%d", &time) != 1)
{
while ((ch = getchar()) != '\n')
putchar(ch);
printf(" is not an integer,please enter an integer.\n");
}
while (getchar() != '\n')
continue;
return time;
}
int getfirst(void)
{
int ch;
ch = getchar();
while (getchar() != '\n')
continue;
return ch;
}