题目叙述
1. 修改前代码
无法通过“最小表达式”这个用例,比如输入“1=”会错误。
#include <stdio.h>
#include<stdlib.h>
int main()
{
int a,b;
char ch;
int flag=0;
int sum=0;
scanf("%d",&a);///左操作数
scanf("%c",&ch);///运算符
scanf("%d",&b);///右操作数
///原来这里写的do-while循环,这种写法会让"1="用例过不去
///所以循环外只能写两个scanf语句
do
{
switch(ch)
{
case '+' :sum=a+b;break;
case '-' :sum=a-b;break;
case '*' :sum=a*b;break;
case '/' :
{
if(b==0)
{
flag=1;
break;
}
else
{
sum=a/b;
break;
}
}
default :flag=1;break;
}
if(flag==1)
{
printf("ERROR");
break;
}
a=sum;
scanf("%c",&ch);
if(ch!='=')
scanf("%d",&b);
}while(ch!='=');
if(flag==0)
printf("%d",a);
return 0;
}
2. 修改后代码
#include <stdio.h>
#include<stdlib.h>
int main()
{
int a,b;
char ch;
int flag=0;
int sum=0;
scanf("%d",&a);///左操作数
scanf("%c",&ch);///运算符
/将这里改成while循环,只接收两个变量就可以避免最短语句过不去情况
while(ch!='='){
scanf("%d",&b);///右操作数
switch(ch)
{
case '+' :sum=a+b;break;
case '-' :sum=a-b;break;
case '*' :sum=a*b;break;
case '/' :
{
if(b==0)
{
flag=1;
break;
}
else
{
sum=a/b;
break;
}
}
default :flag=1;break;
}
if(flag==1)
{
printf("ERROR");
break;
}
a=sum;
scanf("%c",&ch);///操作符
}
if(flag==0)
printf("%d",a);
return 0;
}