结构体数组,指针,函数的应用
选民系统小实验(学习记录)
代码展示
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <stdlib.h>
struct vote
{
char name[32];
int num;
};
struct vote* input_vote_num(struct vote *pvote, int *vote_num)
{
printf("请输入投票人数:");
scanf("%d", vote_num);
assert(vote_num > 0);
pvote = (struct vote *)malloc(*vote_num * sizeof(struct vote) );
struct vote *back = pvote;//注意返回的是malloc分配后的地址
assert(pvote != NULL);
for (int i = 0; i < *vote_num; i++)
{
printf("请输入第%d个投票人姓名:", i+1);
scanf("%s", pvote->name);
pvote->num=0;
pvote++;
}
pvote = back;
return pvote;
}
void output_vote_result(struct vote *pvote, int *count)
{
printf("请输入选民的名字:");
for (int i = 0; i < *count; i++)
{
printf("%s ", pvote->name);
//printf("投票人票数:%d\n", pvote->num);
pvote++;
}
printf("\n");
}
int voteing(struct vote *pvote, int *vote_num)
{
int vote_count = 0;
char name[8];
int feipiao = 0;
int temp = 0;
struct vote *back = pvote;//注意返回的是malloc分配后的地址
// len = sizeof(sizeof(struct vote)/);
for (int i = 0; i < 5; i++)
{
printf("请输入投给谁的名字:\n");
scanf("%s", name);
for (int j = 0; j < *vote_num; j++)
{
if (strcmp(name,pvote->name) == 0){
printf("给%s投票成功\n",pvote->name);
pvote->num++;
temp = 1;
}
pvote++;
}
pvote = back;
if (temp==0){
feipiao++;
printf("给%s投票失败,弃票数位%d\n",name,feipiao);
}
}
return feipiao;
}
struct vote* getmax(struct vote *pvote, int *vote_num)
{
struct vote *max_vote = pvote;
for (int i = 0; i < *vote_num; i++)
{
if (pvote->num > max_vote->num)
{
max_vote= pvote;
}
pvote++;
}
return max_vote;
}
//选票系统投票
int main()
{
struct vote *pvote = NULL;
struct vote *final ;
int vote_num = 0;
//输入投票人数
pvote = input_vote_num(pvote, &vote_num);
//输出投票人数
output_vote_result(pvote, &vote_num);
//开始投票
int feipiao = voteing(pvote,&vote_num);
printf("%d个废票\n",feipiao);
final = getmax(pvote,&vote_num);
printf("投票结果:%s 票数为: %d\n",final->name, final->num);
return 0;
}