首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

输入异常不能退出循环,

2013-03-14 
输入错误不能退出循环,求助!#includestdio.hvoid add(float,float)void subtract(float,float)void mu

输入错误不能退出循环,求助!
#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;
}


[解决办法]
在每个最后不带\n的printf后面加fflush(stdout);
在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin);
另外请检查scanf的返回值。

热点排行
Bad Request.