此程序用于C语言中的中缀和后缀

时间:2015-05-28 13:03:02

标签: c

此程序适用于中缀和后缀。 实际上我正在使用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()
        }
        }

1 个答案:

答案 0 :(得分:2)

这是编译器错误告诉你的:

  1. infix_to_postfix中的switch-case案例在语法上是不正确的。

    例如,case: left paren;应为case leftparen:等。语法为case SOME_CONSTANT: <case_body>

  2. 您也错过了其他变量名称,例如: postfi(应为postfix)。

  3. 您使用了非标准C的转义序列'\d'

  4. 您在while的{​​{1}}中错过了一个括号。

  5. 您已使用case operator但标准签名为void main()

  6. 您在片段末尾的几行末尾忘记了分号。

  7. 另外作为旁注,正确缩进代码可以帮助您找到所有这些错误。