此程序适用于中缀和后缀。 实际上我正在使用dev c ++编译器。 我从最近两天开始尝试这个。但我犯了很多错误。我无法找到如何删除这些错误,请帮助我。
提前感谢。
错误列在下面:
Compiler: Default compiler
Executing gcc.exe...
gcc.exe "C:\Users\amol\Desktop\piyu.c" -o "C:\Users\amol\Desktop\piyu.exe" -I"C:\Dev-Cpp\include" -L"C:\Dev-Cpp\lib"
C:\Users\amol\Desktop\piyu.c:5:17: warning: ISO C requires whitespace after the macro name
C:\Users\amol\Desktop\piyu.c:6:16: warning: ISO C requires whitespace after the macro name
C:\Users\amol\Desktop\piyu.c:7:18: warning: ISO C requires whitespace after the macro name
C:\Users\amol\Desktop\piyu.c: In function `infix_to_postfix':
C:\Users\amol\Desktop\piyu.c:63: error: syntax error before ':' token
C:\Users\amol\Desktop\piyu.c:66: error: syntax error before ':' token
C:\Users\amol\Desktop\piyu.c:75: error: syntax error before ':' token
C:\Users\amol\Desktop\piyu.c:81: error: syntax error before "postfix"
C:\Users\amol\Desktop\piyu.c:87: error: syntax error before '}' token
C:\Users\amol\Desktop\piyu.c:89: error: syntax error before "postfi"
C:\Users\amol\Desktop\piyu.c:90: error: `postfi' undeclared (first use in this function)
C:\Users\amol\Desktop\piyu.c:90: error: (Each undeclared identifier is reported only once
C:\Users\amol\Desktop\piyu.c:90: error: for each function it appears in.)
C:\Users\amol\Desktop\piyu.c:90:12: warning: unknown escape sequence '\d'
C:\Users\amol\Desktop\piyu.c: In function `main':
C:\Users\amol\Desktop\piyu.c:115: error: syntax error before "printf"
C:\Users\amol\Desktop\piyu.c:120: error: syntax error before '}' token
C:\Users\amol\Desktop\piyu.c:93: warning: return type of 'main' is not `int'
执行终止
#include<stdio.h>
#include<conio.h>
#include<string.h>
#define SIZE 40
#define operator-10
#define operand-20
#define leftparen-30
#define rightparen -40
int top=-1;
char stack[SIZE],infix[SIZE],postfix[SIZE];
void push(char symbol)
{
stack[++top]=symbol;
}
char pop()
{
char popped_ele;
popped_ele=stack[top--];
return popped_ele;
}
int get_type(char symbol)
{
switch (symbol)
{
case'(':return leftparen;
case')':return rightparen;
case'+':
case'-':
case'*':
case'/':return operator;
default:return operand;
}
}
int get_precedence(char symbol)
{
switch(symbol)
{
case'+':
case'-':return 1;
case'*':
case'/':return 2;
case'(':return 0;
default:return 999;
}
}
int white_space(char symbol)
{
return(symbol=='\0'||symbol==' '||symbol=='\t');
}
void infix_to_postfix()
{
int i,p,len,type,precedence;
char next;
i=0;p=0;
lenstrlen(infix);
while(i<len)
{
if(!white_space(infix[i]))
{
type=get_type(infix[i]);
switch(type)
{
case: left paren;
push(infix[i]);
break;
case:right paren;
do
{
next=pop();
if(next!='(')
postfix[p++]=next;
}
while(next!='(');
break;
case:operand;
postfix[p++]=infix[i];
break;
case operator:
precedence=get_precedence(infix[i]);
while(top>-1 &&precedence<=get_precedence(stack[top])
postfix[p++]=pop();
push(infix[i]);
break;
}
}
i++
}
while((top>-1)
postfi[p++]=pop();
postfi[p]='\d';
}
void main()
{
int choice,q=0;
while(q!=1)
{
clrscr();
printf("\n\n\n\t\t\t******** main menu*********");
printf("\n\n\n\t enter 1------>toconvert infix to postfix expression");
printf("\n\t enter 2---->to quit");
printf("\n enter your choice:");
scanf("%d",&choice);
switch(choice)
{
case1:
printf("\n enter a valid infix expression:");
fflush(stdin);
gets(infix);
infix_to_postfix();
printf("infix:%s",infix);
printf("\n postfix:%s",postfix);
break;
case2:
q=1
printf("\n thankyou!! quitting from program");
break;
default:printf("\ninvalid choice");
}
getch()
}
}
答案 0 :(得分:2)
这是编译器错误告诉你的:
infix_to_postfix
中的switch-case案例在语法上是不正确的。
例如,case: left paren;
应为case leftparen:
等。语法为case SOME_CONSTANT: <case_body>
。
您也错过了其他变量名称,例如: postfi
(应为postfix
)。
您使用了非标准C的转义序列'\d'
。
您在while
的{{1}}中错过了一个括号。
您已使用case operator
但标准签名为void main()
。
您在片段末尾的几行末尾忘记了分号。
另外作为旁注,正确缩进代码可以帮助您找到所有这些错误。