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
我会进步。一个从文件中读取生日和全名的简单 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