这是我的代码:
#include <stdio.h>
#define N 4
#define A_INPUT "agents.txt"
typedef struct
{
long id;
char lastName[20];
char name[20];
char type;
int workHours;
long managId;
int sell[10];
} Agents;
Agents AgArr[N]={0};
void main()
{
int i,j=1;
FILE*agents;
agents=fopen(A_INPUT,"r");
if(agents == NULL)
{
printf("Unable to open file.\n");
exit();
}
for (i=0; i<N; i++)
{
fscanf(agents, "%ld", &AgArr[i].id);
fscanf(agents, "%s", &AgArr[i].lastName);
fscanf(agents, "%s", &AgArr[i].name);
fscanf(agents, "%c", &AgArr[i].type);
fscanf(agents, "%d", &AgArr[i].workHours);
fscanf(agents, "%ld", &AgArr[i].managId);
}
}
这是我正在阅读的文本文件:
045654987 Cohen Yael P 135 302546887
024587891 Cohen Rafi F 150 -1
306354487 Gabai Shai P 112 302546887
302546887 Benzur Gadi M 130 -1
问题是数组没有得到所有文本,我得到空格和0。 我该如何正确扫描?
答案 0 :(得分:3)
您需要仔细阅读 fscanf(3)的文档(并阅读两次)。
然后理解为什么有时需要fscanf
格式字符串中的空格,也许
if (fscanf(agents," %ld %s",&AgArr[i].id, &AgArr[i].lastName)==2) {
(实际上它可以并且可能应该更多;您可以使用六个参数进行单个但长fscanf
次调用,但是您应该测试fscanf
的结果。
你应该测试fscanf
它的结果是否有意义。
您的for
循环可能应该是
for (i=0; !feof(agents) && i<10; i++)
我相信你应该为你的FILE*
变量命名,并提醒它是某个文件(不是一组代理),例如agf
或agents_file
代替agents