2011-01-07 2 views
0

이 코드는 여기에 작성되었으며 다른 몇 가지 기능과 기본 코드를 올바르게 연결 했으므로 아무 문제가없고 경고없이 컴파일됩니다. (나는 gcc 컴파일러를 사용하고있다).문자열의 단일 연결 목록의 내용을 인쇄 할 수 없습니다.

여러 개의 문자열 목록을 가리키는 포인터 (archive.products [])를 사용합니다. 나는 아직 시작 단계에 있으므로 목록에는 각각 하나의 노드 만 있습니다.

문제는 내가 만든 문자열의 1- 노드 목록의 구성 요소를 화면에 표시하기 위해 lprintf 함수를 가져올 수 없다는 것입니다. push 함수 안에있는 printf는 괜찮은 것을 출력합니다. 그래서 푸시가 그 일을하고 있다는 것을 압니다 ...

내가 뭘 잘못하고 있는지에 대한 생각이 있다면 아래의 답을 내려주십시오. 미리 감사드립니다!

#define line_length 61 
#define max_products 10 

struct terminal_list { 
    char terminal[line_length]; 
    struct terminal_list *next; 
}*newnode, *browser; 
typedef struct terminal_list tlst; 

struct hilevel_data { 
char category[line_length]; 
tlst *products[max_products]; 
}; 
typedef struct hilevel_data hld; 

void import_terms(FILE *fp, hld archive){ 
    char buffer[line_length]; 
    char filter_t[3] = "}\n"; 
    int i = 0, j = 0; 

    while (!feof(fp)) {  
    fgets(buffer, line_length, fp); 
    if (strcmp(buffer, filter_t) == 0) { 
     return; 
    } 

    head_initiator(archive, i); 
    push(buffer,archive, i); 

    lprintf(); 

    i++; 
    } 
} 

void head_initiator(hld archive, int i){ 
    browser = NULL; 
    archive.products[i] = NULL; 
} 

void push(char buffer[],hld archive, int i){ 
newnode = (tlst *)malloc(sizeof(tlst)); 
strcpy(newnode->terminal, buffer); 
// printf("%s", newnode->terminal); 
archive.products[i] = browser; 
newnode->next = browser; 
browser = newnode; 
} 

void lprintf(){ 
    tlst *p; 
    p = browser; 
    if (p = NULL){ 
    printf("empty\n");  
    } 
    while(p!=NULL){ 
    printf("%s\n", p->terminal); 
    p=p->next; 
    } 
} 

답변

1

: void lprintf()

if (p = NULL) 

if (p == NULL) 
+0

오 사랑하는 하나님 감사를 많이해야합니다! 내 코 바로 아래에! –

+1

그리고 만약 여러분이'if (! p)'를 훨씬 더 명확하게 쓰고 싶다면 결코 문제가 없었을 것입니다 ... –

1
if (p = NULL){ 
    printf("empty\n");  
} 

은 당신이 당신은 효과적으로 p = NULL으로 목록을 비우는하고

if (p == NULL){ 
    printf("empty\n");  
} 

을 의미 생각합니다. 에

+0

감사 대단히 –

관련 문제