#include<stdio.h>
int error = 0;
void judge(char flag, double *x, double *y, double *result)
{
if(flag=='+')
*result = *x+ *y;
else if(flag=='-')
*result = 1;
else if(flag=='*')
*result = (*x) * (*y);
else if(flag=='/')
{
if(*y==0)
{
printf("输入格式有误\n");
error = 1;
}
else
*result = *x / *y;
}
}
int main()
{
double x=0.0, y=0.0, result=0, result1=0;
int n = 1, sun=0;
char flag;
double z = 0.0;
double result2 = 0;
char flag1;
while(1)
{
int ling = 0;
error = 0;
printf("请输入算式\n");
scanf("%lf %c %lf", &x, &flag, &y);
judge(flag, &x, &y, &result);
if(error==1)
{
ling=0;
}
else
{
printf("%.3lf", result);
ling=1;
}
result1 = result;
scanf("%c%lf", &flag, &z);
judge(flag, &result1, &z, &result2);
if(error==1)
{
ling=0;
}
else
{
printf("%.3lf%c", result2, flag);
ling=1;
}
}
return 0;
}
应该是第二个scanf()获取第二个式子的运算符号,使用%c的前没加空格,导致获取了输入中的其他符号,而让获取的式子错误了;
可以在第二个scanf()里的%c的前加一个空格,然后再调整下获取输入的逻辑应该就可以了。
修改如下:
参考链接:
#include<stdio.h>
int error = 0;
void judge(char flag, double *x, double *y, double *result)
{
if(flag=='+')
*result = *x+ *y;
else if(flag=='-')
*result = *x-*y;
else if(flag=='*')
*result = (*x) * (*y);
else if(flag=='/')
{
if(*y==0)
{
printf("输入格式有误\n");
error=1;
return ;
}
else{
*result = *x / *y;
}
}
error=0;
}
int main()
{
double x=0.0, y=0.0, result=0, result1=0;
int n = 1, sun=0;
char flag;
double z = 0.0;
double result2 = 0;
char flag1;
while(1)
{
int ling = 0;
error = 0;
printf("请输入算式\n");
scanf("%lf %c %lf", &x, &flag, &y);
// printf("x=%lf, flag=%c ,y=%lf\n",x,flag,y);
judge(flag, &x, &y, &result);
// https://baike.baidu.com/item/%E8%A2%AB%E9%99%A4%E6%95%B0
while(error==1) // 如果输入的算式是除法运算式子,并且 除数为0 ,则重新获取式子
{
printf("请输入算式\n");
scanf("%lf %c %lf", &x, &flag, &y);
// printf("x=%lf, flag=%c ,y=%lf\n",x,flag,y);
judge(flag, &x, &y, &result);
}
if(error!=1) // 如果式子正确,则输出对应的结果
{
printf("%.3lf", result);
ling=1;
}
result1 = result;
scanf(" %c %lf", &flag, &z); // 获取第二个式子的 运算符号和 第三个值
// printf("flag=%c,z=%lf\n",flag,z);
judge(flag, &result1, &z, &result2);
while(error==1) // 同上,如果是除法运算,并且 除数为0,则重新获取第二个式子的运算符号和第三个值
{
printf("请输入算式\n");
// https://baike.baidu.com/item/scanf/10773316
scanf(" %c %lf", &flag, &z);
// printf("flag=%c,z=%lf\n",flag,z);
judge(flag, &result1, &z, &result2);
}
if(error!=1) // 如果式子正确,则打印第二个式子的结果
{
printf("=%.3lf\n", result2, flag);
ling=1;
}
}
return 0;
}