C语言使用结构体制作的票数统计算法

结构体是在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”去比较,无论如何也不会相等,导致程序出错。在实际应用中是很有可能出现有相同姓氏的候选者的,所以这个程序还有待优化之处。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值