2011-06-10 109 views
0

fwrite不工作,我的代碼出了什麼問題?c將字符串寫入文件中,逐行寫入

void printTree (struct recordNode* tree) { 
     char* report1; 

     FILE *fp = fopen("test.txt","w"); 

     if (tree == NULL) { 
      return; 
     } 
     //if(fp) { 

      counter2++; 
      printTree(tree->right); 

      fwrite(fp,"%d\n", tree->pop); 
      //putc(tree->pop, fp); 

      //report1 = printf("%s = %d\n"); 
      printTree(tree->left); 

     //} 
     fclose(fp); 

    } 
+0

我認爲你應該使用fprintf中的格式化輸出到流...... – RBaarda 2011-06-10 06:53:29

+0

嘗試fprintf中(),可能是它的工作原理。否則,請再次編輯 – Stuti 2011-06-10 06:56:20

+0

在編譯器中使用這些選項可獲得最大警告將對您非常有幫助。注意警告並修復每一個警告。任何編譯器都會告訴你這個代碼是錯誤的。 – 2011-06-10 07:04:46

回答

10

fwrite不會執行格式化輸出這樣的,你需要fprintf

fprintf (fp, "%d\n", tree->pop); 

fwrite原型如下:

size_t fwrite (const void *restrict buff, 
       size_t    sz, 
       size_t    num, 
       FILE *restrict  hndl); 

和,因爲你連捐贈它是你呼叫中所有重要的第四個參數(文件句柄),它可以很好地無論它喜歡什麼。

體面的編譯器應該已經警告過你。

這裏還有其他問題。每次調用此函數時,都會重新創建輸出文件。這對遞歸函數並不好,因爲每次重複調用都會破壞已寫入的信息。

您可能要打開的文件外的遞歸函數的,只是使用它內有。

喜歡的東西:

static void printTreeRecur (FILE *fp, struct recordNode* tree) { 
    if (tree == NULL) return; 

    printTreeRecur (fp, tree->right); 
    fprintf (fp, "%d\n", tree->pop); 
    printTreeRecur (fp, tree->left); 
} 

void printTree (struct recordNode* tree) { 
    FILE *fp = fopen ("test.txt", "w"); 
    if (fp != NULL) { 
     printTreeRecur (fp, tree); 
     fclose(fp); 
    } 
} 
+0

誰使用fprintf,下面的行會工作嗎? fprintf(fp,「%s」,「%d \ n」,樹 - >分區,樹 - >彈出); – hkvega 2011-06-10 07:17:48

+0

@hkvega:你想要的東西是:'fprintf(fp,「%s%d \ n」,樹 - >分區,樹 - >彈出);'。當涉及格式化字符串時,「只能有一個」。 – paxdiablo 2011-06-10 07:21:03

+0

如果我想添加「報告1」到文本文件,該怎麼做? – hkvega 2011-06-10 07:21:04