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

时间:2015-11-02 17:25:10

标签: c arrays char printf

我想生成一个类似于“firstname surname:day.month.year”的输出,但我得到的是一些混合顺序。我是C的新手,我不知道这里发生了什么。

所以这就是我得到的

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

}

编辑:我得到与我正在阅读的文件中的订单相同的订单

1 个答案:

答案 0 :(得分:3)

首先,您需要在打印年份后添加换行符。要么改变

printf("%s. ", year);

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

或添加

fputc( '\n', stdout );

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