我有类似下面的数据格式:的fscanf格式说明进入结构
22/March/2014
137 8
15 16 34 8 18
17/November/2014
106 8
22 29 30 9 6
20/November/2014
169 10
50 58 38 29 1
我想使用的fscanf来获取文件的内容,并将它们放到下面的结构:
struct date{
//This is storing the date dd/month/yyyy.
char* fullDate;
// Number of foot and wheelchair passengers.
int foot;
int wheelchair;
//number of infant, child, adult, senior and family tickets sold
int infant;
int child;
int adult;
int senior;
int family;
};
所以我尝试以下操作:
struct date r[50];
FILE* der = fopen("C:\\Users\\Def\\Downloads\\annual_sales_data_2014.txt","r");
int i = 0;
rewind(der);
fscanf(der, "%s", r[i].fullDate);
fscanf(der, "%d %d ", &r[i].foot, &r[i].wheelchair);
fscanf(der, "%d %d %d %d",&r[i].infant, &r[i].child, &r[i].adult, &r[i].senior, &r[i].family);
printf("%s\n%d %d\n%d %d %d %d %d\n\n", r[i].fullDate, r[i].foot, r[i].wheelchair, r[i].infant, r[i].child, r[i].adult, r[i].senior, r[i].family);
fclose(der);
但我相信的fscanf没有被正确的使用,我得到一个有点格式说明符的文档困惑,我也尝试过这种方式。
fscanf(der, "%s/%s/%s\n%d %d\n%d %d %d %d %d\n", r[i].day, r[i].month, , r[i].year, &r[i].foot, &r[i].wheelchair, &r[i].infant, &r[i].child, &r[i].adult, &r[i].senior, &r[i].family);
在上面的例子中,我还照顾了结构接受3个字符*的日月和年。在格式说明符字符串的开头。这不起作用,所以我把它分解为一个更小的格式,看看我能否诊断问题。
即使在细分例如,这
fscanf(der, "%s", r[i].fullDate);
即使这打破了调试器和无法工作的原因。
谢谢。
当'fscanf'到一个变量,你应该给它是地址。 –
'r [i] .fullDate'没有指向一个能够接收数据的确定的内存缓冲区,但是您将其未定义值作为福音传递给'fscanf'来作为群体。您的代码调用未定义的行为。 – WhozCraig
在第一次尝试中,最后一个'scanf()'需要多一个'%d'。否则,它应该工作,除了需要为每个结构的fullDate成员分配内存(并且应该为'%s'添加适当的宽度以防止溢出)。 – Dmitri