Printf и fprintf выводят только первый аргумент - PullRequest
4 голосов
/ 20 сентября 2011

У меня проблема, которую я не могу понять с помощью printf.Я впервые сталкиваюсь с этой проблемой, так что я уверен, что это что-то наивное, но, несмотря ни на что, я не могу решить ее сам ... может быть, просто потому, что я устал: fprintf (и я нашелэто верно и для printf) правильно печатает только первый аргумент, из второго он будет печатать только «0» для чисел и «(null)» для строк

Вот соответствующий код:

#include <math.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void printInputStream(MatePair* inputStream, char* leftFile, char* rightFile){

    MatePair* iterator = inputStream;
    FILE* outLeft = fopen(leftFile, "w");
    FILE* outRight = fopen(rightFile, "w");


    while (iterator->leftRow != MATEPAIR_STOP){

        fprintf(outLeft, "%d: \n", iterator->leftRow);
        fprintf(outLeft, "%s \n", iterator->leftDNA);
        fprintf(outLeft, "%d: %s \n", iterator->leftRow, iterator->leftDNA);

        iterator++;
    }

    fclose(outLeft);
    fclose(outRight);

}

Вот начало вывода:

48: 
NAATAGACCTATATCCTGTACCCAAACAGAAGACAGAGGATTAACCAAACTCTT 
48: (null) 
44: 
NTAGCCATCTTAGACACATGAATATCTTGGGTCACAACTCATACCTCAACAAAA 
44: (null) 
40: 
NAAAATAAGGGGTATACTCGCTTCGGGGCCCCATTTGGCCTCCAAAAGGGGGCG 
40: (null) 
36: 
NTCTATCTTGCTCGAGAGAAAGGGTTGCCTTAGGGTTTTTTGGGGGGGGCTGTA 
36: (null) 
32: 
NCTATAGAAATTTCCCATACCAACTAGACATTTATCTTCCTGTTTTTTTCCGCC 
32: (null) 

Как вы можете видеть, я печатаю каждый член массива дважды: один раз для каждого аргумента и оба аргумента вместе.Данные в порядке, на самом деле с первым методом все в порядке, а со вторым выводится только первый аргумент.Любая идея?Заранее спасибо

Ответы [ 2 ]

8 голосов
/ 20 сентября 2011

Следующая строка с приведением "работает"?

fprintf(outLeft, "%d: %s \n", (int)iterator->leftRow, iterator->leftDNA);

Я подозреваю, что iterator->leftRow это не типа int (или какой-то меньший тип, который получаетпреобразуется в int автоматически).Если я прав, вы вызываете Неопределенное поведение ;в 1-м случае (отдельные утверждения) нет явного «неправильного поведения» (неудачи), во 2-м случае «неправильное поведение» заключается в печати «(NULL)».

2 голосов
/ 20 сентября 2011

Какой тип данных имеет итератор-> leftRow? Вы пытались это сделать (т. Е. Предположить, что это долго).

fprintf(outLeft, "%ld: %s \n", iterator->leftRow, iterator->leftDNA);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...