2014-12-08 4 views
0

У меня возникли проблемы с попыткой печати некоторых узлов дерева. Функция Printf печатает все правильно на терминале, но fputs и 2 версии fprintf только печати:fprintf в C не печатает правильно

вопрос: жир вопрос: жир объект: Pete объект: Pete вопрос: круглый вопрос: круглый объект : пицца объект: пицца объект: ящер объект: ящер

$ кошка test.txt вопрос: жир вопрос: жир унд 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

Не должно быть. Возможно, попробуйте 'fprintf' с 'stdout' для вывода, таким образом, они выведут на консоль так же, как' printf', так что вы увидите. – Jubatian

+1

Заменить 'fprintf (stderr," не может открыть% s для записи \ n ", filename)' с 'perror (filename)'. Попробуй. Тебе понравится. –

+0

Я попытался с помощью stdout, он отлично работает, как и printf. Так проблема с файлом? – user3143696

ответ

0

Вы открываете тот же файл (имя) для записи в каждой рекурсии и рекурсии перед закрытием этого файла. Я не могу разглядеть, что произойдет с выходной буферизацией, когда вы используете разные способы записи в файл. По крайней мере, я предлагаю вам открыть файл перед первым вызовом treePrint() и закрыть его потом.

Смежные вопросы