我在尝试打印一些树节点时遇到了很多麻烦。 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);
}
}
答案 0 :(得分:0)
您在每次递归时打开相同的文件(名称)以进行写入,并在关闭此文件之前进行递归。当您使用不同的写入文件的方法时,我无法理解输出缓冲会发生什么。至少,我建议您在第一次调用treePrint()
之前打开该文件,然后关闭它。