#include<stdio.h>#include<string.h>
#include <stdlib.h>
struct Xuanmin
{
char name[32];
int ticket;
};
struct Xuanmin *initXms(struct Xuanmin *p,int *len)
{
int i;
if(p==NULL){
printf ("请输入有几个人参选\n");
scanf("%d",len);
p=(struct Xuanmin*)malloc((*len)*sizeof(struct Xuanmin));//有几个选民开辟n*结构体个内存空间
}
for(i=0;i<*len;i++){
p->ticket=0;
printf ("请输入%d个选民的名字:\n",i+1);
scanf("%s",p->name);
p++;
}
return p-(*len);//重新指向第一个选民首地址
};
void printXms(struct Xuanmin *p,int *len,int *feipiao)
{
int i;
struct Xuanmin *max;
struct Xuanmin *pbak=p;
for(i=0;i<*len;i++){
printf("第%d个选民名字为%s,得票%d\n",i+1,p->name,p->ticket);
p++;
}
p=pbak;
*max=p[0];
for(i=0;i<*len;i++){
if(max->ticket<p->ticket){
*max=*p;
}
p++;
}
printf("候选人%s以%d票当选,废票是%d\n",max->name,max->ticket,*feipiao);
}
int doVot(struct Xuanmin *p,int len,int feipiao)
{
int i;
int j;
int mark;
char tmpname[32];
struct Xuanmin *pbak=p;
for(i=0;i<5;i++){
mark=0;
printf("你要把票投给谁:\n");
memset(tmpname,'\0',sizeof(tmpname));
scanf("%s",tmpname);
p=pbak;//重新指向首地址
for(j=0;j<len;j++){
if(strcmp(tmpname,p->name)==0){
p->ticket++;
mark=1;
}
p++;
}
//没有此候选人,弃票
if(mark==0){
printf("没有此候选人,弃票\n");
feipiao++;
}
}
return feipiao;
}
int main()
{
int total=0;
int feipiao=0;
struct Xuanmin *xm=NULL;
xm=initXms(xm,&total);//选民赋值
feipiao=doVot(xm,total,feipiao);
printXms(xm,&total,&feipiao);//打印选民
return 0;
}
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
struct Xuanmin
{
char name[32];
int ticket;
};
/*struct Xuanmin *initXms(struct Xuanmin *p,int *len)
{
int i;
if(p==NULL){
printf ("请输入有几个人参选\n");
scanf("%d",len);
p=(struct Xuanmin*)malloc((*len)*sizeof(struct Xuanmin));//有几个选民开辟n*结构体个内存空间
}
for(i=0;i<*len;i++){
p->ticket=0;
printf ("请输入%d个选民的名字:\n",i+1);
scanf("%s",p->name);
p++;
}
return p-(*len);//重新指向第一个选民首地址
};*/
void initXms(struct Xuanmin **pxm,int *pt)//定义二级指针承接二级指针地址
{
int i;
if (*pxm==NULL){
printf("请输入有几个人参选:\n");
scanf("%d",pt);
*pxm=(struct Xuanmin*)malloc(12*sizeof(struct Xuanmin));
}
for(i=0;i<*pt;i++){
(*pxm)->ticket=0;
printf("请输入第%d个选民的名字:\n",i+1);
scanf("%s",(*pxm)->name);
(*pxm)++;
}
*pxm=(*pxm)-(*pt);
}
void printXms(struct Xuanmin *p,int *len,int *feipiao)
{
int i;
struct Xuanmin *max;
struct Xuanmin *pbak=p;
for(i=0;i<*len;i++){
printf("第%d个选民名字为%s,得票%d\n",i+1,p->name,p->ticket);
p++;
}
p=pbak;
*max=p[0];
for(i=0;i<*len;i++){
if(max->ticket<p->ticket){
*max=*p;
}
p++;
}
printf("候选人%s以%d票当选,废票是%d\n",max->name,max->ticket,*feipiao);
}
int doVot(struct Xuanmin *p,int len,int feipiao)
{
int i;
int j;
int mark;
char tmpname[32];
struct Xuanmin *pbak=p;
for(i=0;i<5;i++){
mark=0;
printf("你要把票投给谁:\n");
memset(tmpname,'\0',sizeof(tmpname));
scanf("%s",tmpname);
p=pbak;//重新指向首地址
for(j=0;j<len;j++){
if(strcmp(tmpname,p->name)==0){
p->ticket++;
mark=1;
}
p++;
}
//没有此候选人,弃票
if(mark==0){
printf("没有此候选人,弃票\n");
feipiao++;
}
}
p=pbak;
for(j=0;j<len;j++){
printf("dayin%d\n",p->ticket);
p++;
}
return feipiao;
}
int main()
{
int total;
int feipiao=0;
struct Xuanmin *xm=NULL;
struct Xuanmin **pxm=&xm;
int *pt=&total; //区分一级指针变量与二级指针变量,看保存的是否是指针变量地址
initXms(pxm,pt);//实参地址引用到函数,这里为二级指针地址
//xm=initXms(xm,&total);//选民赋值
feipiao=doVot(*pxm,*pt,feipiao);
printXms(*pxm,&total,&feipiao);//打印选民
return 0;
}