| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 361 人关注过本帖
标题:我编了个逆波兰程序,老出错,求助
只看楼主 加入收藏
clayton1988
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-5-14
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:1 
我编了个逆波兰程序,老出错,求助
#define NUMBER '0'

void push( double f );//入栈操作
double pop ( void );//出栈
int getop( char s[],char line[]);//获取元素

#include <stdio.h>
#include<stdlib.h>
#include "exptr.h"
#define MAXOP 100
//从命令行中输入逆波兰表达式实现计算
int main(int argc, char *argv[])
{
    int type;
    double op2;
    char s[MAXOP];
    while (*++argv){
        type = getop(s,*argv);//从命令行中取操作数
        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 )
                    push( pop()/op2 );
                else
                    printf( "error : zero divisor\n " );
                break;
            default :
                printf( "error : unkown command %s\n", s );
                break;

        }

    }
   
    printf ( "the result is \t%.8g\n", pop() );//命令行结束输出结果
    return 0;
}

#include <stdio.h>
#include <ctype.h>
#include "exptr.h"
int getop( char s[],char line[])
{   
    int i;
    char c;
    i = 0;
   
    c = line[0];
    if ( !isdigit( c ) && c != '.') //不是数
        return c;
    if( isdigit(c) )//收集整数部分

       while( isdigit( s[i++] = c = line[i++] ) )
          ;
        s[i] = '\0';
   
    if( c == '.' )//收集小数部分
         
        while( isdigit( s[i++] = c = line[i++] ) )
        ;
        
    s[i] = '\0';

     return NUMBER;
   
}
#include <stdio.h>
#include "exptr.h"

#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 );
      getchar();
   
   
}
double pop (void)//出栈操作

{
   if ( sp >0 )
      return val[--sp];
   else
        {
        printf( "error: stack empty\n" );
        return 0.0;
        }
}
搜索更多相关主题的帖子: 波兰 
2010-05-25 22:07
zhujianiu
Rank: 4
等 级:业余侠客
帖 子:126
专家分:244
注 册:2010-5-14
收藏
得分:14 
getop(s,*argv);我觉得是你这句的问题!
getop( char s[],char line[]);line是数组。*argv==*argv[0],
也就是说你传递的参数有问题!
2010-05-26 00:01
快速回复:我编了个逆波兰程序,老出错,求助
数据加载中...
 
   



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

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