/*通过一次循环分别按性别和年龄统计人数
(c)hele 2013/03/04*/
#include
#define N 8//N是统计人群的最小年龄
#define M 20//年龄跨度设为20岁
enum year{y1=N,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11,y12,y13,y14,y15,y16,y17,y18,y19,y20};
struct hum{
year old;
int num1[M];
char male[2];
int num2[2];
}hum;//构建的结构体,统计年龄跨度20,2种性别的人群
void display()
{int i;
for(i=0;i
{
printf("old:%d\t:%d\n",N+i,hum.num1[i]);
}
for(i=0;i<2;i++)
printf("male:%c\t:%d\n",hum.male[i],hum.num2[i]);
}
void initial()
{hum.male[0]='0';
hum.male[1]='1';
}
int main()
{initial();
char c[8];
FILE *fp;
if((fp=fopen("in.txt","r"))==NULL)
{
printf("Can't open in.txt");
return 1;
}
while(!feof(fp))
{fscanf(fp,"%s",c);
//读年龄
int old;
fscanf(fp,"%d",&old);
hum.old=(year)old;//强制类型转换,使hum.old是old的值
hum.num1[old-y1]++;//count number of every year old
//读性别
int male;
fscanf(fp,"%d",&male);
hum.num2[male]++;//count number of every 性别
}
display();
return 0;
}
说明:
1.仅供参考
2.注意“in.txt"文件格式,其文件结尾不要有空白行,正文只有姓名、年龄、性别三种,用空格隔开,如图
3.尚有缺陷,没有使用_wchar,对特定中文名字会统计错误,所以尽量用英文名字。