输入错误不能退出循环,求助!
#include<stdio.h>
void add(float,float);
void subtract(float,float);
void multiply(float,float);
void divide(float,float);
float float_get(void);
float float_getd(void);
char char_get(void);
int main(void)
{
char choice;
int cont=1;
float oper1,oper2;
while(cont)
{
printf("Enter the operation of your choice:\n");
printf("a.add s.subtract\n");
printf("m.multiply d.divide\n");
printf("q.quit\n");
choice=char_get();
switch(choice)
{
case 'a':{
oper1=float_get();
oper2=float_get();
add(oper1,oper2);
break;}
case 's':{
oper1=float_get();
oper2=float_get();
subtract(oper1,oper2);
break;}
case 'm':{
oper1=float_get();
oper2=float_get();
multiply(oper1,oper2);
break;}
case 'd':{
oper1=float_get();
oper2=float_getd();
divide(oper1,oper2);
break;}
case 'q':{
cont=0;}
}
}
puts("Bye!\n");
return 0;
}
void add(float f1,float f2)
{
printf("%f.1 + %f.1 = %f.1\n",f1,f2,f1+f2);
}
void subtract(float f1,float f2)
{
printf("%f.1 - %f.1 = %f.1\n",f1,f2,f1-f2);
}
void multiply(float f1,float f2)
{
printf("%f.1 * %f.1 = %f.1\n",f1,f2,f1*f2);
}
void divide(float f1,float f2)
{
printf("%f.1 / %f.1 = %f.1\n",f1,f2,f1/f2);
}
float float_get(void)
{
float number;
printf("Enter a float number:");
while(scanf("%f",&number)!=1)
printf("enter false ,Try again");
return number;
}
float float_getd(void)
{
float number;
printf("Enter a number,beside 0");
while(scanf("%f",&number)!=1&&number!=0)
printf("this is not a float number,\nyou can enter the number such as:2.4,3.5 and so on\n");
return number;
}
char char_get(void)
{
char ch;
while((scanf("%c",&ch)!=1)&&(ch=='a'||ch=='s'||ch=='m'||ch=='d'||ch=='q'))
printf("Enter false! try again,you should enter a or b or s or m or d\n");
return ch;
}
三个输入函数都不能正常工作! 输入错误退不出
[解决办法]
printf("%f.1 + %f.1 = %f.1\n",f1,f2,f1+f2);
改为
printf("%.1f + %.1f = %.1f\n",f1,f2,f1+f2);
[解决办法]
仅供参考
#include<stdio.h>
void add(float, float);
void subtract(float, float);
void multiply(float, float);
void divide(float, float);
float float_get(void);
float float_getd(void);
char char_get(void);
int main(void) {
char choice;
int cont = 1;
float oper1, oper2;
while (cont) {
puts("***************************************************");
printf("Enter the operation of your choice:\n");
printf("a.add s.subtract\n");
printf("m.multiply d.divide\n");
printf("q.quit\n");
choice = char_get();
switch (choice) {
case 'a': {
oper1 = float_get();
oper2 = float_get();
add(oper1, oper2);
break;
}
case 's': {
oper1 = float_get();
oper2 = float_get();
subtract(oper1, oper2);
break;
}
case 'm': {
oper1 = float_get();
oper2 = float_get();
multiply(oper1, oper2);
break;
}
case 'd': {
oper1 = float_get();
oper2 = float_getd();
divide(oper1, oper2);
break;
}
case 'q': {
cont = 0;
}
}
}
puts("Bye!\n");
return 0;
}
void add(float f1, float f2) {
printf("%.1f + %.1f = %.1f\n", f1, f2, f1 + f2);
}
void subtract(float f1, float f2) {
printf("%.1f - %.1f = %.1f\n", f1, f2, f1 - f2);
}
void multiply(float f1, float f2) {
printf("%.1f * %.1f = %.1f\n", f1, f2, f1 * f2);
}
void divide(float f1, float f2) {
printf("%.1f / %.1f = %.1f\n", f1, f2, f1 / f2);
}
float float_get(void) {
float number;
int i = 1;
while (1) {
puts("enter a float:");
i = scanf("%f", &number);
if (i == 1)
break;
else if (i == 0) {
char temp;
scanf("%c", &temp);
} else
puts("enter wrong,you can enter only a float ,try again:");
//fflush(stdin);
}
return number;
}
float float_getd(void) {
float number;
int i = 1;
while (1) {
puts("enter a float,beside zero:");
i = scanf("%f", &number);
if (i == 1 && number != 0)
break;
else if (i == 0) {
char temp;
scanf("%c", &temp);
} else
puts("enter wrong,you can enter only a float ,try again:");
//fflush(stdin);
}
return number;
}
char char_get(void) {
char ch;
puts("Enter a character from keyboard");
while ((ch = getchar())) {
if (ch == '\n')
continue;
else if (ch == 'a')
break;
else if (ch == 'd')
break;
else if (ch == 's')
break;
else if (ch == 'm')
break;
else if (ch == 'q')
break;
puts("Enter wrong,you should enter only a character,try again:");
//fflush(stdin);
}
return ch;
}