2015-11-02 87 views
1

我想生成这样的输出“姓氏名: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); 

} 

编辑:我会得到相同的顺序,因为我从

+2

从'surname'结尾删除'\ n'。 – interjay

+2

并在最后一个'printf'语句中添加一个'\ n' –

回答

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 –

相关问题