搜索
查看: 1443|回复: 6
打印 上一主题 下一主题

c程序设计语言第二版上的一个例题,设计的是一个计算器。虽然编译成功,但是运行后...

[复制链接]
跳转到指定楼层
楼主
发表于 2013-9-10 21:01:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
11啊哈币
#include <stdio.h>
#include <stdlib.h>

#define MAXOP 100
#define NUMBER '0'

int getop(char []);
void push (double);
double pop(void);
int main()
{
        int type;
    double op2;
    char s[MAXOP];

    while ((type=getop(s))!=EOF){
                switch(type){
        case NUMBER:
                        push(atof(s));
                        break;
        case '+':
                        push(pop()+pop());
            break;
        case '*':
                        push(pop()*pop());
            break;
        case '-':
                        op2=pop();
                        push(pop()-op2);
            break;
        case '/':
                        op2=pop();
            if(op2!=0.0)
                                push(pop()/op2);
            else
                                printf("error:zero divisor\n");
            break;
        case '\n':
                        printf("\t%.8g\n",pop());
            break;
        default:
                                printf("error:unknown command %s\n",s);
                break;
        }
    }


        system("pause");
        return 0;
}



#define MAXVAL 100

int sp=0;
double val[MAXVAL];

void push(double f)
{
        if (sp<MAXVAL)
                val[sp++]=f;
    else
                printf("error:stack full,can't push %g\n",f);
}

double pop(void)
{
        if (sp>0)
                return val[--sp];
    else{
                printf("error:stack empty\n");
        return 0.0;
    }
}

#include <ctype.h>

int getch(void);
void ungetch(int);

int getop(char s[])
{
        int i,c;
    while((s[0]=c=getch())==' '||c=='\t')
                ;
    s[i]='\0';
    if(!isdigit(c)&&c!='.')
                return c;
    i=0;
    if (isdigit(c))
                while(isdigit(s[++i]=c=getch()))
                        ;
    if (c=='.')
                while(isdigit(s[i++]=c=getch()))
        ;
    s[i]='\0';
    if (c!=EOF)
                ungetch(c);
    return NUMBER;
}  

#define BUFSIZE 100

char buf[BUFSIZE];
int bufp=0;

int getch(void)
{
return (bufp>0)?buf[--bufp]:getchar();
}

void ungetch(int c)
{
        if (bufp>=BUFSIZE)
                printf("ungetch:too many characters\n");
    else
                buf[bufp++]=c;

}


最佳答案

查看完整内容

看上去你抄错了
沙发
发表于 2013-9-10 21:01:44 | 只看该作者
看上去你抄错了
  1. int getop(char s[])
  2. {
  3.         int i,c;
  4.     while((s[0]=c=getch())==' '||c=='\t')
  5.                 ;
  6.     s[i]='\0';
复制代码
板凳
发表于 2013-9-10 23:29:33 | 只看该作者
你的问题是什么……
地板
 楼主| 发表于 2013-9-11 12:16:54 | 只看该作者
rosynirvana 发表于 2013-9-10 23:29
你的问题是什么……

编译虽然成功,但计算不了。。
5#
发表于 2013-9-11 12:18:05 | 只看该作者
fengzhenging 发表于 2013-9-11 12:16
编译虽然成功,但计算不了。。

你是按照后缀法输入的吗?
6#
 楼主| 发表于 2013-9-11 15:36:41 | 只看该作者
rosynirvana 发表于 2013-9-11 12:18
你是按照后缀法输入的吗?

求举例,不管是输入3+6还是3 6 +都无法计算,enter键一按下 就是跳出Windows正在寻找解决问题的方案
7#
 楼主| 发表于 2013-9-11 18:36:15 | 只看该作者
rosynirvana 发表于 2013-9-11 16:56
看上去你抄错了

好眼力!!!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表