C 为什么使用printf打印时输出顺序会发生变化?

C 为什么使用printf打印时输出顺序会发生变化?,c,arrays,char,printf,C,Arrays,Char,Printf,我想生成这样的输出“firstname姓氏:day.month.year”,但得到的是一些混乱的顺序。我是C的新手,我不知道这里发生了什么 这就是我得到的 这是我的密码 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, *surna

我想生成这样的输出“firstname姓氏:day.month.year”,但得到的是一些混乱的顺序。我是C的新手,我不知道这里发生了什么

这就是我得到的

这是我的密码

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

}
char字符串[imax];
fgets(字符串、imax、团队1)//wo,最大计数,aus welchem文件
int i=1,k=0;
字符分隔符[]=“”;
字符*日、*月、*年、*名、*姓;
字符*stats[5];
while(fgets(字符串、imax、组1)!=0)
{
/*stats[0]=strtok(字符串,分隔符);

而(i首先,您需要在打印年份后添加换行符

printf("%s. ", year);

或添加

fputc( '\n', stdout );

第二件事是,在
fgets()
之后,源文本文件的换行符是
字符串的一部分,因此也是
姓氏的一部分。您可以通过将
'\n'
添加到
分隔符
(如果它是在另一个系统(例如UNIX)上打开的Windows文本文件,
'\r'
)来处理此问题

删除
\n
姓氏末尾的
\n
,并在最后一个
printf
语句中添加
\n
,不要添加
\r
;当在Windows中以文本模式打开文件时,
\n\r
在程序看到它之前被转换为
\n
fputc( '\n', stdout );