| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 503 人关注过本帖
标题:c语言+-*/简单计算器中使用do while会出现错误!
只看楼主 加入收藏
yang0401
Rank: 2
等 级:论坛游民
帖 子:84
专家分:57
注 册:2011-5-23
结帖率:69.23%
收藏
已结贴  问题点数:20 回复次数:5 
c语言+-*/简单计算器中使用do while会出现错误!
程序代码:
#include <stdio.h>
#include <malloc.h>

char fh[5]={'+','-','*','/','a'};
int shuzi[6]={-1,1,1,2,2,0};
typedef struct jia
{
    char a[100];
    int top;
}JIA;
typedef struct shuzi
{
    int data[100];
    int aop;
}SZ;
void inits(JIA**k)
{
    *k=(JIA*)malloc(sizeof(JIA));
    (*k)->top=-1;
}
void init(SZ**l)
{
    *l=(SZ*)malloc(sizeof(SZ));
    (*l)->aop=-1;
}
void push(SZ*l,int t)
{
    l->aop++;
    l->data[l->aop]=t;
}
void pushs(JIA*k,char t)
{
    k->top++;
    k->a[k->top]=t;
}
char pups(JIA*l)
{
    char a;
    a=l->a[l->top];
    l->top--;
    return a;
}
int pup(SZ*l)
{
    int a;
    a=l->data[l->aop];
    l->aop--;
    return a;
}
char dings(JIA*l)
{
    char a;
    a=l->a[l->top];
    return a;
}
int ding(SZ*l)
{
    int a;
    a=l->data[l->aop];
    return a;
}
bool compare(char l)
{
     int i;
     for(i=0;i<5;i++)
     {
                     if(l==fh[i])
                     {
                                 return true;
                     }
     }
     return false;
}
char pri(char l,char m)
{
    int i,a,b;
    a=0;
    b=0;
    for(i=0;i<5;i++)
    {
        if(l==fh[i])
        {
                    a=i+1;
        }
    }
    for(i=0;i<5;i++)
    {
        if(m==fh[i])
        {
                    b=i+1;
        }
    }
    if(shuzi[b]>shuzi[a])
    {
        return '>';
    }
    if(shuzi[b]<=shuzi[a])
    {
        return '<';
    }
}
int jisuan(int a,char p,int b)
{
    int t;
    switch(p)
    {
    case '+':
        t=a+b;
        break;
    case '-':
        t=a-b;
        break;
    case '*':
        t=a*b;
        break;
    case '/':
        t=a/b;
        break;
    }
    return t;
}
int mm(void)
{
    int a,b,v,t;
    char *p,q,*l;
    JIA*m;
    inits(&m);
    SZ*n;
    init(&n);
    pushs(m,'q');
    l=(char*)malloc(sizeof(100));
    printf("请输入需要计算的表达式,以a结尾");
    gets(l);
    p=l;
    while(p[0]!='a' || dings(m)!='a')
    {
                    if(!compare(p[0]))
                    {
                                        t=p[0]-48;
                                        p++;

                                        while(!compare(p[0]))
                                        {
                                                           t=t*10+p[0]-48;
                                                           p++;
                                        }
                                        push(n,t);
                    }
                    else
                    {
                        switch(pri(dings(m),p[0]))
                        {
                        case '>':
                             pushs(m,p[0]);
                             p++;
                             break;
                        case '<':       
                             a=pup(n);
                             b=pup(n);
                             q=pups(m);
                             v=jisuan(b,q,a);
                             push(n,v);
                             break;
                        }
                    }
    }
    printf("%s=%d\n",l,v);
    free(l);
    return v;
}


int main(void)
{
    do
    {
              mm();
    }while(1);
    /*为什么第一次执行是正确的,但是第二春执行的结果就是错的哦?*/
    getchar();
    return 0;
}
个人感觉是内存没有释放,求高手详细解答一下!!!!!!!!!!!!!!!!!!!!!
搜索更多相关主题的帖子: c语言 计算器 while 
2011-08-22 09:43
yang0401
Rank: 2
等 级:论坛游民
帖 子:84
专家分:57
注 册:2011-5-23
收藏
得分:0 
希望高手帮帮忙啊!
2011-08-22 14:47
hongmaomao
Rank: 2
等 级:论坛游民
帖 子:87
专家分:15
注 册:2009-1-3
收藏
得分:15 
  l=(char*)malloc(sizeof(100))

你的l究竟想分配多大的空间?
2011-08-22 16:07
yang0401
Rank: 2
等 级:论坛游民
帖 子:84
专家分:57
注 册:2011-5-23
收藏
得分:0 
坐等高手解答!!!!!!!!!!!!!!!!!
2011-08-23 11:52
hello_jwei
Rank: 2
等 级:论坛游民
帖 子:4
专家分:28
注 册:2011-6-14
收藏
得分:5 
3L已经告诉你哪里错了吧
2011-08-23 12:23
编程达人
Rank: 2
等 级:论坛游民
帖 子:62
专家分:66
注 册:2011-8-11
收藏
得分:0 
太复杂了..........看来要向你学习呀
2011-08-23 12:25
快速回复:c语言+-*/简单计算器中使用do while会出现错误!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.151463 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved