C中的fprintf无法正确打印

时间:2014-12-08 19:00:17

标签: c tree printf

我在尝试打印一些树节点时遇到了很多麻烦。 printf函数在终端上正确打印所有内容,但是fput和fprintf的两个版本只是打印出来:

问题:胖子 问题:胖 对象:皮特 对象:皮特 问题:回合 问题:回合 对象:披萨 对象:披萨 对象:穿山甲 对象:穿山甲

$ cat test.txt 问题:胖 问题:胖 UND 由Golin

以下是代码:

void treePrint(struct node *ptr)
{
  if (ptr == NULL)
  printf("ERROR!!!");
else
{    
  char line[1000];
  char filename[] = "test.txt";
  FILE *file = fopen(filename, "w");
  if (!file)
  {
    fprintf(stderr, "can't open %s for writing\n", filename);
    exit(-1);
  }

  if (ptr -> yes_ptr != NULL && ptr -> no_ptr != NULL)
  {
  strcpy(line, "question: ");
  strcat(line, ptr -> questionName);
  strcat(line, "\n");
  printf("%s", line);

  fprintf(file, "%s", line);
  fputs (line, file);
  fprintf(file, "question: %s\n", ptr -> questionName);

  treePrint(ptr -> yes_ptr);
  treePrint(ptr -> no_ptr);
}
else
{
  strcpy(line, "object: ");
  strcat(line, ptr -> objectName);
  strcat(line, "\n");
  printf("%s", line);

  fprintf(file, "%s", line);
  fputs (line, file);
  fprintf(file, "object: %s\n", ptr -> objectName);
}
fclose(file);
}
}

1 个答案:

答案 0 :(得分:0)

您在每次递归时打开相同的文件(名称)以进行写入,并在关闭此文件之前进行递归。当您使用不同的写入文件的方法时,我无法理解输出缓冲会发生什么。至少,我建议您在第一次调用treePrint()之前打开该文件,然后关闭它。