【问题标题】:Why is the output order changing when I print using printf?为什么我使用 printf 打印时输出顺序会发生变化?
【发布时间】:2016-02-02 16:14:31
【问题描述】:

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

}

编辑:我得到的顺序与我正在读取的文件中的顺序相同

【问题讨论】:

  • 去掉surname末尾的\n
  • 并在最后一个printf 语句中添加\n

标签: c arrays char printf


【解决方案1】:

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

printf("%s. ", year);

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

或添加

fputc( '\n', stdout );

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

【讨论】:

  • 不要加\r;在 Windows 中以文本模式打开文件时,\n\r 在您的程序看到它之前会被转换为 \n
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
  • 2017-02-05
  • 1970-01-01
相关资源
最近更新 更多