2016-09-30 2 views
0

안녕하세요. 내 BST의 내용을 파일에 쓰려고합니다. 그것은 단지 루트와 다른 아무것도 인쇄 이후 지금까지 나는 운이 없었을이진 트리 구조를 C 파일의 파일로 작성

내 트리 구조는이

typedef struct node 
{ 
char *Emp; 
struct node *left; 
struct node *right; 
}mynode; 

처럼 보인다 그리고 내 코드는 내가 사용하려고이

void export(mynode *root) 
{ 
File *fp 
fp=fopen("Names.txt","w"); 

if(root!=NULL) 
{ 
export(root->left); 
fprintf(fp,root->Emp); 
export(root->right); 
} 
fclose(fp); 
} 

처럼 보인다 printf는 단지 그것을 인쇄 할 것인지를 알기 만하면된다. 문제는 말도 안되는 다른 fprintf 문을 써도 재귀 호출 후에 아무 것도 쓰지 않는다는 것입니다.

+0

파일을 열어 두었다가 (파일을 제로로 만들고), 일부 노드를 쓰고, 현재의 화신을 닫습니다. 재귀 적 쓰기 기능 밖에서 열기 및 닫기를 수행해야합니다. –

+2

동일한 파일을 여러 번 * 다시여십시오. 모든 재귀 호출에 대해 한 번. 그것은 분명히 당신이 원하는 것이 아닙니다. 모든 재귀 호출은 같은'fp'를 사용해야합니다. – kaylum

답변

4

export() 함수의 맨 위에 새 파일을 만들 때마다 문제가 발생할 가능성이 높습니다.

파일을 먼저 작성하고 핸들을 내보내기 기능에 전달하십시오. 예 :

void export(mynode* root) 
{ 
    File *fp 
    fp=fopen("Names.txt","w"); 
    export_recursive(fp, root); 
    fclose(fp); 
} 

void export_recursive(File* fp, mynode* root) 
{ 
    if(root!=NULL) 
    { 
     export_recursive(root->left); 
     fprintf(fp,root->Emp); 
     export_recursive(root->right); 
    } 
} 
+1

스택 오버플로에 오신 것을 환영합니다. 좋은 첫 번째 대답. 현재 함수 외부에있는 코드 조각을 함수로 작성해야하고, 추가 된 함수를'export()'라고하고 고정 된 재귀 함수를'export_recursive()'또는 다른 이름으로 변경해야한다고 제안 할 수 있습니다. 너의 선택의. –

0

편집 : Tanguy가 나에게 이겼습니다. 그의 코드는 분명히 작동하지만, 파일 열기를 다른 기능으로 두는 것이 더 좋습니다.

fopen이 실패하여 null을 반환하므로 이미 열린 파일을 열려고하는 것이 문제입니다. 대신에 다음과 같이 할 수 있습니다 :