fprintf函数困惑

来源:百度知道 编辑:UC知道 时间:2024/06/27 05:03:55
#include"stdio.h"
int main()
{
FILE *file;
struct
{
char name[16];
int age;
char sex;
}student[3]; /* 定义结构体数组*/
int i;
if((file=fopen("wy.txt","w"))==NULL)
return 0;
for(i=0;i<=2;i++)
scanf("%s,%d,%c",student[i].name,&student[i].age,&student[i].sex); /*向三个结构体元素输入数据*/
for(i=0;i<=2;i++)
fprintf(file,"%s,%d,%c",student[i].name,student[i].age,student[i].sex); /*将结构体元素中的三个元素的数据输出到wy.txt文件上*/
fclose(file);
}

我有一些不明白
1>当编译通过生成123.exe文件时,运行,输入数据,再打开wy.txt看,在每一个元素输入完之后,会添加一些数字,
比如我输入
wangyao,19,m
wuyong,19,m
bailongbiao,19,m
输出到wy.txt文件的内容是
wangyao,19,m,2212, wuyong,19,m,0, bailongbiao,19,m,3840,
其中2212,0,3840是什么意思呢?

2>还有,为什么有时候运行123.exe时,输入数据后,打开wy.txt文件内容确是乱码呢?

"wangyao,19,m"被作为一个字符串存进了student[i].name
你可以scanf("%s ,%d,%c",student[i].name,&student[i].age,&student[i].sex);
%s后面空一个格,输入的时候也空一个格

fprintf(file,"%s,%d,%c",student[i].name,student[i].age,student[i].sex);

改为

fprintf(file,"%s,%d,%c\n",student[i].name,student[i].age,student[i].sex);

**************************************************************************

网友“ch_cityhunter”所言有理,建议做如下修改(注意,输入数据时用逗号分隔):
scanf("%[^,]%*c%d,%c",student[i].name,&student[i].age,&student[i].sex);