结构体是在C语言中用户自定义的变量类型,它可以由若干个类型的变量组成。结构体变量、结构体数组常用于对多个包含多项属性的成员的处理。
设计程序统计得票是对结构体的简单应用,代码如下:
#include <stdio.h>
#include <string.h>
int main()
{
struct H
{
char name[20];
int num;
}join[3]={"Wang",0,"Xie",0,"Zhang",0};//定义结构体数组join并赋初值
int i,j;
char votename[20];
for(i=0;i<10;i++)//几个人投票就循环几次,这个循环起统计票数的作用
{
printf("第%d张票投给:\n",i);
scanf("%s",votename);
for(j=0;j<3;j++)//几个候选人就循环几次,这个循环起判定票的归属的作用
{
if(strcmp(votename,join[j].name)==0)join[j].num++;
}
}
printf("结果为:\n");
for(i=0;i<3;i++)
printf("%s:%d\n",join[i].name,join[i].num);
return 0;
}
其实这个统计票数的程序也是存在缺陷的。不难发现在程序中候选人是无法输入全名的,因为输入全名是带有空格的(如"Zhang San")这样的情况会使scanf在输入的时候将输入的一个名字“Zhang San”当成两个名字“Zhang”和“San”来看待,并且在之后的strcmp函数中这样的名字也无法正常比较,这相当于是将"Zhang San"与“Zhang”去比较,无论如何也不会相等,导致程序出错。在实际应用中是很有可能出现有相同姓氏的候选者的,所以这个程序还有待优化之处。