修改了下:
main()
{
//全部初始化,特别是数组
int i=0,j=0,k=0,l=0,m=0,n=1;//i是geter的下标,j是str第一维下标,l是signal的下标,m是tempstr的下标
double result = 0,num1 = 0,num2 = 0;//结果,临时计算数1,临时计算数2
double str[30] = {0};//储存num的字符串数组
char geter[100] = {0};;//储存输入信息的数组
char signal[30] = {0};;//储存符号的数组
char tempstr[15] = {0};;//暂时存储一个数组,以便转为double 型
char *p = 0;
printf("请输入您的算式,并以回车结束\n");
gets(geter);
for(p=geter; *p != 0; p++)
{
if(*p=='+'||*p=='-'||*p=='*'||*p=='/')
{
if(tempstr[0]!='\0')//考虑3:这里原意是要检查输入错误,但是如何处理负数呢?
{
signal[l]=*p;
l++;
str[j]=atof(tempstr);//考虑1:用系统函数效率更高
j++;
n++;
for(;m>=0;)
tempstr[--m]='\0';//之前已经累加过1 所以回滚的时候要先减一
m = 0; //for结束后m=-1;
}
// else
{
/*考虑3:建议先不做错误检查,第二版再做*/
// printf("输入错误\n");
}
}
else
{
tempstr[m]=*p;
m++;
}
}
/*处理最后一位数字*/
str[j]=atof(tempstr);
j++;
for(;m>=0;)
tempstr[--m]='\0';//之前已经累加过1 所以回滚的时候要先减一
m = 0;
for(i=0;signal[i]!='\0';i++)
{
if(signal[i]=='*'||signal[i]=='/')
{
num1=str[i];
num2=str[i+1];
if(signal[i]=='*')
result=multi(num1,num2);
if(signal[i]=='/')
{
if(num2!=0)
result=devide(num1,num2);
else
printf("除数不能等于0\n");
}
str[i]=result;
myremove(str,i+1,n);
mycharremove(signal,i);
}
if(signal[i]=='+'||signal[i]=='-')
{
num1=str[i];
num2=str[i+1];
if(signal[i]=='+')
result=add(num1,num2);
if(signal[i]=='-')
result=sub(num1,num2);
str[i]=result;
myremove(str,i+1,n);
mycharremove(signal,i);
}
}
printf("计算结束\n");
printf("结果是%lf\n",str[0]);
}
其中有几个问题 对于-1+1 你准备怎么处理?
对于1+-1你准备怎么处理