2015-11-02 2 views
1

Я хочу сгенерировать вывод, подобный этому «firstname surname: day.month.year», но то, что я получаю, является некоторым замешанным порядком. Я новичок в C, и я не знаю, что здесь происходит.Почему меняется порядок вывода при печати с помощью printf?

Так это то, что я получаю

enter image description here

Это мой код

char string[imax]; 
fgets (string, imax, team1); //wo, max count, aus welchem file 
int i=1, k=0; 
char delimiter[] = " "; 
char *day, *month, *year, *firstname, *surname; 
char *stats[5]; 

while(fgets(string,imax,team1) != 0) 
{ 
    /*stats[0] = strtok(string,delimiter); 
    while(i <=4) 
    { 
     stats[i] = strtok(NULL,delimiter); 
     i++; 
    }*/ 

    day = strtok(string,delimiter); 
    month = strtok(NULL,delimiter); 
    year = strtok(NULL,delimiter); 
    firstname = strtok(NULL,delimiter); 
    surname = strtok(NULL,delimiter); 

    printf("%s ", firstname); 
    printf("%s:", surname); 
    printf("%s.", day); 
    printf("%s.", month); 
    printf("%s. ", year); 

} 

EDIT: Я получаю тот же порядок, как и порядок в файле Читаю от

+2

Удалите '\ n' с конца' surname'. – interjay

+2

И добавьте '\ n' в последнем утверждении' printf' –

ответ

3

Во-первых, вам нужно добавить новую строку после печати года. Либо изменить

printf("%s. ", year); 

в

printf("%s.\n ", year); 

или добавить

fputc('\n', stdout); 

Вторая вещь, что после fgets() новой строки из исходного текстового файла является частью string и поэтому часть surname , Вы можете справиться с этим, добавив '\n' в delimiter (и если это текстовый файл Windows, открытый в другой системе (например, UNIX), '\r')

+1

Не добавляйте '\ r'; когда файл открывается в текстовом режиме в Windows, '\ n \ r' переводится в' \ n', прежде чем ваша программа увидит его –