| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 445 人关注过本帖
标题:[求助]编译错误
只看楼主 加入收藏
mnzmx
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2005-6-24
收藏
 问题点数:0 回复次数:4 
[求助]编译错误

#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define MAXNUM 100

char top(char a[])
{
int i;
char b;
for(i=0;a[i]!='\0';i++);

b=a[i-1];
return b;
}

int power(char x,int &base)
{
int power;
if(x=='+'||x=='-')
power=base+1;
if(x=='*'||x=='/')
power=base+2;
if(x=='(')
{
power=3;
base+=3;
}
if(x==')')
{
power=-1;

}
if('0'<=x&&x<='9')
power=0;
return power;
}

int pop1(int a[])
{
int i,b;
for(i=0;a[i];i++);//!='\0'

b=a[i-1];
a[i-1]='\0';
return b;
}
char pop2(char a[])
{
int i;
char b;
for(i=0;a[i]!='\0';i++);

b=a[i-1];
a[i-1]='\0';
return b;
}
int math(int x,char y,int z)
{
if (y=='+')
x=x+z;
if (y=='-')
x=x-z;
if (y=='*')
x=x*z;
if (y=='/')
x=x/z;
return x;
}

void push1(int a[],int b)
{
int i;
for(i=0;a[i];i++);

a[i]=b;
a[i+1]='\0';
}
void push2(char a[],char b)
{
int i;
for(i=0;a[i]!='\0';i++);

a[i]=b;
a[i+1]='\0';
}


void infixtoSuffix(const char *infix)
{
int i,b,c,base=0,opnd[MAXNUM],m,a;
char y,x,optr[MAXNUM];
opnd[0]='\0';
optr[0]='\0';
for (i = 0; infix[i] != '\0'; i++)
{
x=infix[i];
if (power(x,base)==0)
{
if (i>0&&power(infix[i-1],base)==0)
{
b=pop1(opnd);
a=10*b+int(x-'0');
}
else
a=int(x-'0');//
push1(opnd,a);

for(m=0;opnd[m];m++)
printf("%d ", opnd[m]);
m=10-m;
for(m;m!=0;m--)
printf(" ");
printf("%-15s%-10c%d入OPND栈\n", optr, x, a);

}
else if (power(x,base)==-1)
{

a=pop1(opnd);
b=pop1(opnd);
y=pop2(optr);
c=math(b,y,a);
push1(opnd,c);
////////////////////////////
for(m=0;opnd[m];m++)
printf("%d ", opnd[m]);
m=10-m;
for(m;m!=0;m--)
printf(" ");
printf("%-15s%-10c计算%d%c%d并将结果%d压入OPND栈\n", optr, x,b, y,a,c);

//////////////////////////////////


y=pop2(optr);
///////////////////////////////
for(m=0;opnd[m];m++)
printf("%d ", opnd[m]);
m=10-m;
for(m;m!=0;m--)
printf(" ");
printf("%-15s %c出OPTR栈\n", optr, y);
/////////////////////////////////


if(y=='(') ;
else
{

while(y!='(')
{
a=pop1(opnd);
b=pop1(opnd);
c=math(b,y,a);
push1(opnd,c);
//////////////////////////
for(m=0;opnd[m];m++)
printf("%d ", opnd[m]);
m=10-m;
for(m;m!=0;m--)
printf(" ");
printf("%-15s 计算%d%c%d并将结果%d压入OPND栈\n", optr, b, y,a,c);
///////////////////////////////////

y= pop2(optr);
}
////////////////////////////////
for(m=0;opnd[m];m++)
printf("%d ", opnd[m]);
m=10-m;
for(m;m!=0;m--)
printf(" ");
printf("%-15s %c出OPTR栈\n", optr, y);
//////////////////////////////////
}
base-=3;
}
else if (power(x,base)==3)
{
push2(optr,x);
///////////////////////////
for(m=0;opnd[m];m++)
printf("%d ", opnd[m]);
m=10-m;
for(m;m!=0;m--)
printf(" ");
printf("%-15s%-10c%c入OPTR栈\n", optr, x, x);

}
else
{
if(power(x,base)>power(top(optr),base))
{push2(optr,x);
///////////////////////////
for(m=0;opnd[m];m++)
printf("%d ", opnd[m]);
m=10-m;
for(m;m!=0;m--)
printf(" ");
printf("%-15s%-10c%c入OPTR栈\n", optr, x, x);
///////////////////////////
}
else
{
a=pop1(opnd);

b=pop1(opnd);

y=pop2(optr);

c=math(b,y,a);

push1(opnd,c);
/////////////////////////////
for(m=0;opnd[m];m++)
printf("%d ", opnd[m]);
m=10-m;
for(m;m!=0;m--)
printf(" ");
printf("%-15s%-10c计算%d%c%d并将结果%d压入OPND栈\n", optr, x ,b, y,a,c);
///////////////////////////////////
push2(optr,x);
/////////////////////////////////
for(m=0;opnd[m];m++)
printf("%d ", opnd[m]);
m=10-m;
for(;m!=0;m--)
printf(" ");
printf("%-15s%-10c%c入OPTR栈\n", optr, x, x);
///////////////////////////////
}
}
}
y=pop2(optr);

while(opnd[1]!='\0')
{
a=pop1(opnd);

b=pop1(opnd);

c=math(b,y,a);

push1(opnd,c);
//////////////////////////////////
for(m=0;opnd[m];m++)
printf("%d ", opnd[m]);
m=10-m;
for(;m!=0;m--)
printf(" ");
printf("%-15s 计算%d%c%d并将结果%d压入OPND栈\n", optr, b, y,a,c);
//////////////////////////////
y=pop2(optr);
}
printf("算术表达式计算结果为:%d\n",opnd[0]);

}


void getline(char *line, int limit)
{
char c;
int i=0;
while (i<limit-1&&(c=getchar())!=EOF&&c!='\n')
line[i++]=c;
line[i]='\0';
}

void main()
{
char infix[MAXNUM] ;
printf(" ***********************************\n");
printf(" * 算术表达式求值演示 *\n");
printf(" * --------------------------- *\n");
printf(" * 制 作 人 starrysky *\n");
printf(" * 个人信息 见论坛简介 *\n");
printf(" * QQ 297456458 *\n");
printf(" * ————————————————*\n");
printf(" ***********************************\n");
printf("\n\n说明:\n如下表达式非法:\n 数字和'('直接连接在一起,如 1+2(1+1)\n 请输入一个表达式,如3*(7-2)。\n\n请输入表达式 :");
getline(infix, MAXNUM);
printf("\n");
printf("OPND栈 OPTR栈 输入字符 主要操作\n");
infixtoSuffix(infix);
printf("按回车结束。");
getchar();

}

论坛上的一段原代码,用WIN-TC编译时说int power(char x,int &base)这句“说明语法错误”

怎么回事啊

搜索更多相关主题的帖子: 编译 
2006-07-07 20:05
乌鸦丘比特
Rank: 1
等 级:新手上路
威 望:2
帖 子:625
专家分:0
注 册:2004-7-19
收藏
得分:0 

因为你编译的是C++的代码,WIN-TC的内核是TC2。0不支持C++,
请换一个支持C++的编译器编译


我喜欢创造,一只扑腾着翅膀向天空飞翔的乌鸦
2006-07-07 20:22
mnzmx
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2005-6-24
收藏
得分:0 
请问哪里看出来是C++代码?
2006-07-07 20:30
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 
小天不会C++..这都是某本该死的教材搞的鬼

[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-07-07 20:34
mnzmx
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2005-6-24
收藏
得分:0 
我用C++bulder编译后可以运行,但是运算结果会出错误有一个莫名其妙的数会进栈
2006-07-07 20:35
快速回复:[求助]编译错误
数据加载中...
 
   



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

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