2011-06-10 111 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