| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 718 人关注过本帖
标题:C语言计算器问题,谁来帮我看看哪里出错了?
取消只看楼主 加入收藏
doublecc
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-12-22
收藏
 问题点数:0 回复次数:0 
C语言计算器问题,谁来帮我看看哪里出错了?
#include<stdio.h>
#include<stdlib.h>

#define MAXSIZE 10
typedef struct
   {
    float s[10];
    int top;
}stack;
//void initstack(stack &st)
//{
//    st.top=-1;
//}

float pop(stack &st)
{  
    st.top--;
    return(st.s[st.top+1]);
}

void push (stack &st,float x)
{
    st.top++;
    st.s[st.top]=x;
}

float top(stack &st)
{
    return(st.s[st.top]);
}   

int precede (char q1,char q2)//比较运算符的函数
{
    int x;
    switch(q1)
    {      
    case '+':
    case '-':
        if (q2=='*'||q2=='/'||q2=='(')
            x=-1;
        else x=1;
        break;
    case '*':
    case '/':
        if(q2=='(')
            x=-1;
        else
            x=1;
        break;
    case '(':
        if(q2=='#')
            x=100;
        else  if(q2==')')
            x=0;
        else x=1;
        break;
    case ')':
        if(q2=='(')
            x=100;
        else
            x=1;
    case '#':
        if(q2==')')
            x=100;
        else if(q2=='#')
            x=0;
        else
            x=-1;
    }
    return x;
}

float operate (float a,char y,float b)
{
   
    stack f,s;
    char q;
    float c;
    if(precede(y,q)==-1)
    {
        y=(int)pop(f);
        b=pop(s);
        a=pop(s);
        switch(y)
        {
        case'+':
            c=a+b;
            break;
        case'-':  
            c=a-b;
            break;
        case'*':
            c=a*b;
            break;
        case'/':
            c=a/b;
            break;
        default:
            exit(0);
        }
        return c;
    }

}



bool  in(char ch)
{
    if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='('||ch==')')
        return 1;
    else
        return 0;
}

int main()
{
    stack *f,*s;
    char *exp;
    char n;
    int x;
    float op;
    float theta;
    float a,b;
    float adj;
    printf("输入:");
    scanf("%s",exp);
    adj=float('#');
    push(*s,adj);
    for(;*exp!='\0';exp++)
    {
        if(in(*exp)==1)
        {
            switch (precede((char)top(*s),*exp))
            {
            case -1:
                op=*exp;
                push(*f,op);
                break;
            case 0:
                op=*exp;
                pop(*f);
                push(*f,op);
                break;
            case 1:  
                theta=pop(*f);
                b=pop(*s);
                a=pop(*s);
                push(*s,operate(a,(char)theta,b));
                break;
            default:
                printf("输入的字符串有误!!!!");
                exit(0);
            }

        }
        
        else
        {
            n=*exp-'0';
            push(*s,n);
        }
        
    }
    printf("\n结果:%f",pop(*s));
    return 0;
}



编译成功,但运行时发送错误信息。。
帮忙看看。。谢谢啦
搜索更多相关主题的帖子: 计算器 C语言 
2010-12-22 15:45
快速回复:C语言计算器问题,谁来帮我看看哪里出错了?
数据加载中...
 
   



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

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