C语言—结构体与二级指针运用实战,实现候选人投票系统

该代码示例展示了如何在C语言中利用结构体和二级指针创建一个简单的投票系统。程序首先定义了一个包含姓名和票数的候选人结构体,然后通过用户输入动态分配内存并初始化候选人。接着,程序接受用户投票,比较投票的姓名与候选人姓名并更新票数。最后,程序会显示投票结果及废票数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言结构体与二级指针的应用 

实现一个投票系统

代码演示

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct people
{
	char name[128];   //候选人的名字
	int piao;         //候选人的票数
};

void kaipi(struct people **p,int *ren)   // 1.候选人的名字赋值,票数初始化0
{                   //结构体二级指针运用
	
	puts("请输入候选人数");   //输入有几个候选人,
	scanf("%d",ren);
	
	*p =(struct people*)malloc(  (*ren) * sizeof(struct people));//根据候选人数动态开辟字节空间malloc()
	
	int i;
	for(i = 0;i<*ren;i++){
		
		puts("请输入候选人名字");        
		(*p) -> piao = 0;               //给每个候选人票数初始化成0   //注意优先级 (*p) 
		scanf("%s", (*p) -> name);     //输入候选人的名字            //注意优先级 (*p) 
		(*p) ++;                       //下一个候选人,指针后偏移     //注意优先级 (*p) 
	}
	
	(*p)  = (*p) - *ren;    //重新把指针p偏移到头
	
    printf("有%d个候选人,名字是\n",*ren);   //打印候选人数
	for(i = 0; i < *ren;i++){             //打印候选人名字
		
		printf("%s\n",(*p)->name);
		
		(*p) ++; 
	}
	
	(*p)  = (*p) - *ren;
	
}


int toupiao(struct people *p,int ren)   // 2.候选人投票环节
{
	struct people *p2;
	p2 = p;
	int i;
	int j;
	char toupiaoname[128];
	int feipiao;
	int data = 0;
	
	for(i=0;i<5;i++){     //这里i=5,表示有五个票
		
		feipiao = 0;       //废票初始化
		puts("请输入候选人名字进行投票");              //提示打印,输入候选人名字,进行投票
		memset(toupiaoname,'\0',sizeof(toupiaoname));  
		scanf("%s",toupiaoname);               //输入候选人名字toupiaoname,进行投票
		 
		for(j = 0;j<ren;j++){                  //将投票人名字和每个候选人的名字进行对比 
			
			if( strcmp(toupiaoname,p->name)  == 0 ){ //当投票人名字与候选人名字相同时候
				
				p->piao++;                           //候选人的票数+1
				feipiao = 1;                       
			}
			
			
			p++;      //指针的偏移,这里指针偏移的意思是换下一候选人               
		}
		
		p = p2;       //将指针重新回到头,意思是指针指针重新偏移到第一候选人
		
		if(feipiao == 0){    //如果,输入的投票人名字,不是候选人的名字(找不到相同候选人名字),记录一次废票,此票作废
			                  
			puts("请输入正确的候选人名字,此票作废");
			data++;
		}
		
		
		
	}
	
	return data;   //返回废票的数
}

void jieguo(struct people *p,int ren,int feipiao)  //投票结果的打印
{	
	int i;
	
	for(i=0;i<ren;i++){
		printf("name %s,票数%d \n",p->name,p->piao);  //打印每个候选人的名字和获得的票数
		p++;
	}
	
	printf("废票数%d",feipiao);      //打印废票数
}

int main()
{	
	int ren;
	struct people *p = NULL;
	int feipiao;
	
	kaipi(&p,&ren);   //1.输入有几个候选人,并且输入候选人的名字
	
	feipiao = toupiao(p,ren);  //2.进行投票,输入候选人名字,投一票
	
	jieguo(p,ren,feipiao);   //打印投票结果
	
	return 0;
}

运行结果:

请输入候选人数
3
请输入候选人名字
a
请输入候选人名字
b
请输入候选人名字
c
有3个候选人,名字是
a
b
c
请输入候选人名字进行投票
a
请输入候选人名字进行投票
a
请输入候选人名字进行投票
a
请输入候选人名字进行投票
c
请输入候选人名字进行投票
b
name a,票数3
name b,票数1
name c,票数1
废票数0

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值