要注意初始化,最好间接赋值字符串用strcmp
代码:
#include <stdio.h>
#include <string.h>
struct Person
{
char name[50];
int tickets;
};
int main()
{
//几位候选人
struct Person candidate[3];
struct Person max;
struct Person *p=candidate;
int j=0;
int i=0;
int voter[5];
char votename[20];
int none=0;
//输入候选人的名字
int len1=sizeof(candidate)/sizeof(candidate[0]);
for(int i=0;i<len1;i++){
printf("请输入第%d位候选人的名字\n",i+1);
scanf("%s",p->name);
p->tickets = 0;//一定要对传参的目标进行初始化
p++;
}
p=candidate;
printf("投票者请注意,候选人为%s ,%s ,%s \n",(p)->name,(p+1) ->name,(p+2) ->name);
printf("投票者请注意,票为%p ,%p ,%p \n",&candidate[0].tickets,&candidate[1].tickets,&candidate[2].tickets);
printf("投票者请注意,目前票为%d ,%d ,%d \n",candidate[0].tickets,candidate[1].tickets,candidate[2].tickets);
puts("开始投票");
//参与投票人数
/*puts("请输入共有多少人参入投票");
scanf("%d",&j);*/
//投票
int len2=sizeof(voter)/sizeof(voter[0]);
for(int i = 0;i<len2;i++){
none = 0;//每次循环初始化,不能在下面
puts("请输入你支持的候选人的名字");
memset(votename,'\0',sizeof(votename));//初始化
scanf("%s",votename);//数组首就是地址可以不用加&
for(int k=0;k<len1;k++){
if(strcmp(votename,p->name)==0){//比较是否相等 //注意最好通过间接和strcmp进行结构体间接赋值
p->tickets++;
none=1;
p++;
}
}
if(none == 0){
puts("哥们,你选的那位大神啊!没这人啊!");
}
}
p=candidate;
for(i=0;i<len1;i++){
printf("名字 %s ,票数 %d\n",p->name,p->tickets);
p++;
}
max =candidate[0];
for(i=0;i<len1;i++){
if(max.tickets<candidate[i].tickets)
max=candidate[i];
}
printf("得票最高的为%s ,票数为%d \n",max.name,max.tickets);
return 0;
}