c записать строку в файл построчно - PullRequest
1 голос
/ 10 июня 2011

fwrite не работает, что не так с моим кодом?

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);

    }

1 Ответ

10 голосов
/ 10 июня 2011

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);

и, поскольку выВы даже не даете тот самый важный четвертый параметр (дескриптор файла) в вашем вызове, он может очень хорошо все, что угодно.

Приличный компилятор должен был предупредить вас об этом.

У вас также есть другая проблема здесь.Каждый раз, когда вы вызываете эту функцию, вы создаете выходной файл заново.Это не хорошо для рекурсивной функции, так как каждый повторяющийся вызов уничтожит уже записанную информацию.

Вы можете открыть файл вне рекурсивной функции и просто использовать * 1021.* это внутри.

Что-то вроде:

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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...