通过 C 程序编写 XML 文件



>我在c中创建了一个程序来读取特定天数的温度,然后将输入的所有数据保存到XML文件中。我已经处理了对程序进行编码,并使其生成一个包含输入数据的 XML 文件,但是 XML 文件中显示的输出是错误的,它的格式不正确,所以我想知道是否有人可以帮助我,这是我第一次使用 XML。

我的代码基本上是这样的:

#include <stdio.h>
#include <stdlib.h>
typedef struct{
double minimum;
double maximum;
double average;
int daynumber;
}Measurement;
#define QUANT 31
void measure(Measurement *);
void output(FILE *, Measurement *);
int main(int argc, char** argv) {
Measurement m[QUANT];
int i;
FILE *f;
printf("Input data:n");
for(i=0; i<1; i++)
measure(&m[i]);
printf("nData was saved into xml filen");
f = fopen("data.xml","w");
if(f==NULL){
printf("Error");
return 0;
}
fprintf (f,"<?xml version="1.0" encoding="utf-8"?>n");
for(i=0;i<1;i++){
output(f,m);
}
fclose(f);
return (EXIT_SUCCESS);
}
void measure(Measurement *x){
printf("Input minimum temperature: ");
scanf("%f",&x->minimum);
printf("Input maximum temperature: ");
scanf("%f",&x->maximum);
printf("Input average temperature: ");
scanf("%f",&x->average);
printf("Input day number: ");
scanf("%f",&x->daynumber);
}
void output(FILE *f, Measurement *x){
fprintf(f,"<day>n");
fprintf(f,"<minimum>%f</minimum>n",x->minimum);
fprintf(f,"<maximum>%f</maximum>n",x->maximum);
fprintf(f,"<average>%f</average>n",x->average);
fprintf(f,"<daynumber>%d</daynumber>n",x->daynumber);
fprintf(f,"</day>n");
}

然后我的输出总是这样的:

<?xml version="1.0" encoding="utf-8"?>
<day>
<minimum>0.000000</minimum>
<maximum>0.000000</maximum>
<average>0.000000</average>
<daynumber>1065353216</daynumber>
</day>

你能看到我的代码中可能有什么问题吗?提前谢谢。

问题似乎出在您的函数调用中:

output(f,m);

这样,对于每次迭代,您实质上是在访问函数调用中的第一个元素m[0]

你想传递数组中每个元素的地址,比如

output(f,&(m[i]));

或者,为了简化起见,您可以传递元素本身(而不是地址(,例如

output(f,m[i]);

并像

void output(FILE *f, Measurement x){ // second argument is not a pointer
fprintf(f,"<day>n");
fprintf(f,"<minimum>%f</minimum>n",x.minimum);  // x is not a pointer
fprintf(f,"<maximum>%f</maximum>n",x.maximum); .....

也就是说,扫描语句

scanf("%f",&x->daynumber);

应该是

scanf("%d",&x->daynumber);

因为daynumberint型,而对于其他

scanf("%f",&x->minimum);

应该是

scanf("%lf",&x->minimum);

因为minimum和其他成员的类型为double

最新更新