2011-02-15 2 views
0

주석 처리 된 줄의 문제점은 무엇입니까?"구조가 아닌 데이터 요소 요청"오류가 발생하는 이유는 무엇입니까?

#include<stdio.h> 


typedef struct _stack 
{ 
    char data; 
    struct stack* next; 
}stack; 

int main() 
{ 
    char *s="4$2*3-3+8/4/(1+1)"; 
    char * prefix= (char*) malloc(strlen(s+1)); 
    convertinfixtoprefix(s,prefix); 
    int len=strlen(prefix); 
    int i; 
    for(i=0;i<len/2;i++) 
    { 
     char temp; 
     temp=prefix[i]; 
     prefix[i]=prefix[len-i-1]; 
     prefix[len-i-1]=prefix[i]; 
    } 
    printf("The Prefix expression is %s",prefix); 
} 


void convertinfixtoprefix(char* infix,char*prefix) 
{ 
    stack *s=NULL; 
    int pr; 
    char c=NULL; 
    char d; 
    int i=strlen(infix)-1; 
    int index=0; 

    while(i>=0) 
    { 
     c=infix[i]; 
     if(c==')') 
     { 
      push(&s,c); 
     } 
     else 
     if(c=='(') 
     { 
      while((d=pop(&s))!=')') 
      { 
       prefix[index]=d; 
       index++; 
      } 
     } 

     if((c!='+') && (c!='-') && (c!='*') && (c!='/') && (c!='$')) 
     { 
      prefix[index]=c; 
      index++; 
     } 
     else 
     { 
      pr=priority(d=pop(&s)); 
      while(pr>priority(c)) 
      { 
       prefix[index]=d; 
       index++; 
       pr=priority(d=pop(&s)); 
      } 
      push(&s,c); 
     } 
    } 
} 


void push(stack** s,char c) 
{ 
    if(*s==NULL) 
    { 
    *s=(stack*)malloc(sizeof(stack)); 
    ((*s)->data)=c;// HERE ITS SHOWS ERROR WHY? 
    ((*s)->next)=NULL; 
     } 
    else 
    { 
     stack* temp=(stack*)malloc(sizeof(stack)); 
     temp->data=c; 
     temp->next=*s; 
     (*s)=temp; 
    } 
} 


char pop(stack**s) 
{ 
    if(*s==NULL) 
    printf("Stack khaali hai bhai\n"); 
    else 
    { 
    char c=*s->data; 
    stack* temp=*s; 
    *s=*s->next; 
    free(temp); 
     return c; 
    } 
    return 0; 
} 


int priority(char c) 
{ 
    if(c=='+'||c=='-') 
    { return 1; 
    } 
    else if(c=='*'||c=='/'||c=='%') 
    { return 2; 
    } 
    else if(c=='$') 
    { 
     return 3; 
    } 
} 
+1

코드를 포맷하십시오. –

+1

대부분의 빈 줄이 아닌 코드를 읽기 쉽도록 만들고 여러 구역으로 분할되지 않도록하는 것이 좋습니다. – morphles

+0

그리고 malloc 캐스트를 제거하고 stdlib.h에서 프로토 타입을 가져옵니다. – user611775

답변

-2

매우 자주 오류가 팝업 때 구조체/클래스 (C/C++/오브젝티브 -c/...) 멤버에 대한 접근의 범위에 정의되어 있지 않습니다.

포함 된 파일을 확인하는 것은 간단한 원인 일 수 있습니다.

+0

downvote 주셔서 감사합니다. 누구와도 건설적인 의견을 남기지 않았 으면 ... – jv42

0

struct _stack의 재귀가 올바르지 않습니다. 포인터는 다음 또한 당신이 그것을 표시된 곳

+0

사실이지만 질문에 대한 답변이 아닙니다. (그리고 코드에는 다른 많은 것들이 있습니다.) –

2

귀하의 오류는 아니지만 ... 대신 유형에 스택 만든을 참조로, 구조체 _stack * 다음로 선언해야합니다.

char c=*s->data; 
stack* temp=*s; 
*s=*s->next; 

가 있어야한다 :

char c=(*s)->data; 
stack* temp=*s; 
*s=(*s)->next; 

너무 예를 소수의 다른 나쁜 물건있다

그것은이 라인이다 당신은 stdlib.h와 string.h 헤더를 incude 할 필요가 있습니다 - 그리고 당신이 함수를 호출하기 전에 프로토 타입이 필요합니다. 컴파일시 경고가 켜지면이 오류가 표시됩니다.

+0

이 질문에 답한 사람 *은 실제로 코드를 컴파일하는 데 어려움을 겪었습니다. –

관련 문제