c语言题目:输入一个算式(没有空格),求结果

运算优先级按照从左到右,如:1+2*10-10/2=,输出10
代码如下:
#include <stdio.h>
int main(void){
int k,i;
char str[100], x[100];
double result[100],answer;
printf("请输入一个算式:");
scanf("%s",str);
k=i=0;
do{
result[k]=0;
do{
result[k]=result[k]*10+str[i]-'0';
i++;
}while(str[i]!='+'
&& str[i]!='-'
&& str[i]!='*'
&& str[i]!='/'
&& str[i]!='=');
if(str[i]=='=')
break;
k++;
x[k]=str[i];
k++;
i++;
}while(str[i]!='=');//simplify above

answer=result[0];//calculate below
k=1;
do{
if(x[k]=='+')
answer=answer+result[k+1];
if(x[k]=='-')
answer=answer-result[k+1];
if(x[k]=='/')
answer=answer/result[k+1];
if(x[k]=='*')
answer=answer*result[k+1];
k=k+2;
}while(x[k]!='=');

printf("%.0lf\n",answer);

return 0;

}

请问大神,哪里错了?多谢了!!

#include <stdio.h>
int main(void)
{
int k, i, m;
char str[100], x[100];
double result[100];
printf("请输入一个算式:");
scanf("%s", str);
k = i = 0;
do
{
result[k] = 0;
do
{
result[k] = result[k] * 10 + str[i] - '0';
i++;
}
while (str[i] != '+' && str[i] != '-' && str[i] != '*'
&& str[i] != '/' && str[i] != '=');
if (str[i] == '=')
{
x[k] = str[i];
k++; // 修改这里
break;
}
x[k] = str[i];
k++;
i++;
}
while (str[i] != '='); // simplify above
// calculate below
i = 0;
do
{ // 先计算高优先级运算符
while (x[i] == '*' || x[i] == '/')
{
if (x[i] == '*')
result[i] *= result[i + 1];
else
result[i] /= result[i + 1];
for (m = i + 1; m < k; m++) // 移动运算符和数据
{
result[m] = result[m + 1];
x[m - 1] = x[m];
}
}
i++;
}
while (x[i] != '=');
i = 0; // 然后计算低优先级运算符
while (x[i] == '+' || x[i] == '-')
{
if (x[i] == '+')
result[i] += result[i + 1];
else
result[i] -= result[i + 1];
for (m = i + 1; m < k; m++)
{
result[m] = result[m + 1];
x[m - 1] = x[m];
}
}
printf("%.0lf\n", result[0]);
return 0;
}
温馨提示:答案为网友推荐,仅供参考
相似回答