其他都挺正常,就是最后几句出了问题,它不执行scanf语句,无法实现选择,求解一下
#include <stdio.h>
int main(int argc, char** argv)
{
float a,b;
char op;
END:printf("请输入算式:");
scanf("%f%c%f",&a,&op,&b);
switch(op)
{
case '+':
printf("%g+%g=%g\n",a,b,a+b);break;
case '-':
printf("%g-%g=%g\n",a,b,a-b);break;
case '*':
printf("%g*%g=%g\n",a,b,a*b);break;
case '/':
if (0==b)
printf("除数不能为零!\n");
printf("%g/%g=%g\n",a,b,a/b);break;
default:
printf("运算符错误!\n");
}
char ch;
printf("是否继续运算(Y/N or y/n):");
scanf("%c",&ch);
if(ch=='Y'||ch=='y')
goto END;
else
printf("over!");
return 0;
}
因为前面 scanf("%f%c%f",&a,&op,&b);用户输入了数据和换行符‘\n’,在读取了数据之后,输入缓存里就残留了一个‘\n’。
再次使用scanf("%c")会读取输入缓存里上次残留的‘\n’,而不是读取新输入的字符。这样就造成了严重的错误。
可以在用 scanf("%c",&ch); 读取字符前用 setbuf(stdin, NULL); 清除输入缓存。
setbuf(stdin, NULL);
scanf("%c",&ch);
或者用 scanf("%1s",&ch); 读取字符,用"%1s"会跳过空格与换行符,读取一个非空格与换行符的字符。
修改供参考:
#include <stdio.h>
int main(int argc, char** argv)
{
float a,b;
char op;
END:printf("请输入算式:");
scanf("%f%c%f",&a,&op,&b);
switch(op)
{
case '+':
printf("%g+%g=%g\n",a,b,a+b);break;
case '-':
printf("%g-%g=%g\n",a,b,a-b);break;
case '*':
printf("%g*%g=%g\n",a,b,a*b);break;
case '/':
if (0==b) //修改
printf("除数不能为零!\n");
else
printf("%g/%g=%g\n",a,b,a/b);
break;
default:
printf("运算符错误!\n");
}
char ch;
printf("是否继续运算(Y/N or y/n):");
getchar(); //修改
scanf("%c",&ch);
if(ch=='Y'||ch=='y')
goto END;
else
printf("over!");
return 0;
}