C 编程 - fscanf () 不读取整个日期,它只读取“1 8 2020”而不是“01 08 2020”

Programming C - fscanf () doesn´t read the whole date, it read only "1 8 2020" instead of "01 08 2020"

我会进步。一个从文件中读取生日和全名的简单 C 程序。 我将尝试使用高级别 I/O 流。 但是我有一个问题……我使用 fscanf() 来读取文件…… 但它不会像这样读取文件的完整日期:

文件: (test.txt)

01 02 1999 name1 nachname1
08 01 2000 name2 nachname2
10 02 2001 name3 nachname3

它刚刚读到这个:

程序输出:

1 2 1999 name1 nachname1
8 1 2000 name2 nachname2
10 2 2001 name3 nachname3

它不显示日期编号开头的 0。 请检查我的源代码并告诉我我做错了什么。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <errno.h>
#include <fcntl.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
    int main()
    {//   MAIN START
        char name[20],fname[20];
        int day,month,year;
        FILE *fd;
        fd= fopen("test.txt","r");
    // read word by word
    while( fscanf(fd,"%d %d %d %s %s",&month,&day,&year,&name,&fname) != -1) // print till EOF
        {
        printf("\n DATA: %d %d %d %s %s\n",month,day,year,name,fname);
        }
    fclose(fd);
    }//   MAIN END

又是我的文件(test.txt):

01 02 1999 name1 nachname1
08 01 2000 name2 nachname2
10 02 2001 name3 nachname3

这里又是编译后程序的输出:

1 2 1999 name1 nachname1
8 1 2000 name2 nachname2
10 2 2001 name3 nachname3

编译器:GCC

OS: Linux

问候我 :) !!

这与读取无关,而是您输出的格式。尝试:

 printf("\n DATA: %02d %02d %04d %s %s\n", month, day, year, name, fname);

%02d 将打印宽度为 2 的零填充整数。

数据开头未显示 0 的原因是您将该值存储为 int。当用 %d 打印 int 时,您永远不会看到前导零,因为 0001 = 1。您必须将它们作为字符串读入以获得前导零,然后使用 atoi 获得实际数字或再次使用 fscanf。

#include <stdio.h>
int main()
    {//   MAIN START
        char name[20],fname[20];
        char day[5],month[5],year[5];
        FILE *fd;
        fd= fopen("test.txt","r");
    // read word by word
    while( fscanf(fd,"%s %s %s %s %s",&month,&day,&year,&name,&fname) != -1) // print till EOF
        {
        printf("\n DATA: %s %s %s %s %s\n",month,day,year,name,fname);
        }
    fclose(fd);
    }//   MAIN END