2014-12-08 3 views
3

당신의 knowladge 공유 주셔서 감사합니다 :)! 난 그냥 devc이 C 프로그램을 작성 ++와 나는 typdef과 같은 구조체 에 대한 오류가 많이있어 :C 프로그램에서 typedef 구조체 오류

#include <stdio.h> 
#include <stdlib.h> 

typedef struct item* ptr; 
typedef struct itme 
{ 
     int data; 
     ptr next; 
}node; 
void add2list(ptr*,int); 
void freeList(ptr*); 
int main() 
{ 
    ptr H=NULL; 
    ptr p3=H; 
    int num; 
    while (scanf("%d",&num)!=EOF) 
      add2list(&H,num); 

    while(p3) 
    { 
      printf("%d ",p3->data); 
      p3=p3->next; 
    } 
    printf("end\n"); 
    freeList(&H); 
    return 0; 
} 

void add2list(ptr* H, int num) 
{ 
    ptr p1,p2,T; 
    T=(ptr)malloc(sizeof(node)); 
    if(!T) 
    { 
      printf("cannot allocate memory\n"); 
      exit(0); 
    } 
    t->data=num; 
    p1=*H; 
    while(p1) 
    { 
      if(p1->data==num) 
      { 
       free(T); 
       goto duplicate; 
      } 
      else 
      { 
       p2=p1; 
       p1=p1->next; 
      } 
    } 
    T->next=p1; 
    if(p1==*H) 
     *H=T; 
    else 
    p2->next=T; 
    duplicate:; 
} 
void freeList(ptr* H) 
{ 
    ptr p1; 
    while(H) 
    { 
     p1=*H; 
     (*H)=p1->next; 
     free(p1); 
    } 

} 
: 4 호선 이는 " '정의되지 않은 유형 struct item'" for every line with "->" operator, "forward declaration of 구조체 항목의 잘못된 사용은"코드입니다

감사합니다.

+0

이있을 것이며, 어떻게 당신은 왜 ('을 ptr'와'node' 필요 'node'를 사용하지 말라),'ptr'도'item' 앞에 선언되어 있습니까? – crashmstr

+1

'typedef struct itme {'typo를 확인하십시오. 또한, 구조체 정의 뒤에'typedef struct item * ptr;'을 이동하십시오. 왜'H'와'p3' 둘 다 필요합니까? –

+0

@dvir naim 자격이없는 프로그래머와 대부분의 경우 C에서 malloc 앞에 캐스팅하지 마십시오. –

답변

0

나는 모든 코드를보고하지 않았다하지만 오타

형식 정의 구조체 항목 * PTR이있는 것 같다;

형식 정의 구조체 p3가 명시 적으로

ptr H=NULL; ptr p3=H; 

적어도 당신이해야 루프 전에 NULL

에 의해 초기화 되었기 때문에
{

는 또한이 코드는

while(p3) 
{ 
     printf("%d ",p3->data); 
     p3=p3->next; 
} 

은 아무 의미가 없습니다 니펫을 itme 명세서 추가

p3 = H; 

또한 기능 add2list 다른 오타

당신은 포인터 T를 선언하지만 더 t

void add2list(ptr* H, int num) 
{ 
    ptr p1,p2,T; 
    T=(ptr)malloc(sizeof(node)); 
    if(!T) 
    { 
      printf("cannot allocate memory\n"); 
      exit(0); 
    } 
    t->data=num; 

기능 FREELIST 또한 잘못된 포인터를 사용하고있다. 대신 문

while(H) 

C에서 malloc``의 반환을 캐스팅하지 마십시오

while(*H) 
+0

정말 고마워요 !!! 나는 당신이 말한 것을 고쳤습니다. :) –

1

주요 문제는 "item" "itme"의 철자가 있다는 것입니다. 우리 한테 일어난 일.

+0

믿을 수 없습니다 !!!!!!!! 이 솔루션은 내 문제를 해결 !!!!!!!!!!!!!!!!!!!! –

+0

@dvir naim 틀렸어. 다른 오타 및 오류가 있기 때문에 문제가 해결되지 않습니다. 내 대답을 보라. –