pta C语言习题6-7
编写一个四则运算优先级相同的计算器
若为非法输入或除数为0则输出ERROR。
写好了但运行不出结果,求找错
代码如下:
#include <stdio.h>
#include <math.h>
int main(void)
{
int i = 0,j,cnt = 1,n = 0,m = 0;//计数变量
int *p;//判断是否为错误输入,错误则为-1
double num[100] = {0};//储存从字符串中获取的数字
char ch[100] = {'e'},dos[100];//ch[]用来获取输入的字符串
//dos[]用来存放从字符串中获取的运算符
while (ch[i-1] != '=')
ch[i++] = getchar();//获取字符串
for (i = 0;ch[i] != 'e';i++)
{
if (ch[i] >= 48 && ch[i] <= 57)//判断字符串某一项为数字或运算符
{
j = i + 1;
if (ch[j] >= 48 && ch[j] <= 57)//是否为多位数
{
while (ch[j] >= 48 && ch[j] <= 57)
{
j++;
cnt++;
}
while (i < j)
{
num[n] += ch[i++]*pow(10,cnt - 1);
cnt--;//将该多位数求出并保存至num[]
}
i--;
}
else
{
num[n++] = ch[i];//直接将个位数保存至num[]
}
}
else if (ch[i] = '*')//将运算符保存至dos[]
dos[m++] = '*';
else if (ch[i] = '+')
dos[m++] = '+';
else if (ch[i] = '-')
dos[m++] = '-';
else if (ch[i] = '/')
dos[m++] = '/';
else
{
*p = 0;//非法输入
break;
}
}
if (*p != 0)//确保不为非法输入
{
j = -1;
for(i = 0;i < n;i++)//判断是否存在0,以及存放下标
{
if (num[i] == 0)
j = i;
}
if (j > 0)
{
if (dos[j - 1] == '/')//判断0前一个运算符是否为“/”
printf ("ERROR\n");
}
else
{
i = 0;
while(i <= m)//开始运算
{
if (dos[i] == '+')
num[i + 1] += num[i];
else if (dos[i] == '-')
num[i + 1] -= num[i];
else if (dos[i] == '*')
num[i + 1] *= num[i];
else if (dos[i] == '/')
num[i + 1] /= num[i];
i++;
}
printf ("%lf",num[i]);
}
}
else
{
printf ("ERROR\n");
}
return 0;
}
多次检查无果,求找错
十分感谢!