模拟一个简单的投票过程。程序定义了一个结构体 XuanMin 来存储选民的名字和票数,并通过用户输入进行投票,最后公布投票结果和胜选者。以下是代码的简要解释和一些潜在问题:
定义了一个名为 XuanMin 的结构体,包含 name(选民名字)和 tickets(票数)两个字段。
在 main 函数中,声明了一个 XuanMin 类型的数组 xm 来存储3位选民的信息,以及一个 XuanMin 类型的变量 max 用于记录得票最多的选民。
使用 for 循环初始化 xm 数组中每个选民的票数为0,并提示用户输入每位选民的名字。
进行5次投票,每次投票前清空 tmpName 字符串,然后通过 scanf 读取用户输入的选民名字。
通过另一个 for 循环在 xm 数组中查找与用户输入名字匹配的选民,并增加其票数。
如果用户输入的名字不在 xm 数组中,增加废票数 feiPiao。
投票结束后,打印每位选民的名字和票数。
通过比较找出得票最多的选民,并打印胜选者的名字和票数以及废票数。
#include <stdio.h>
#include <string.h>
struct XuanMin
{
char name[32];
int tickets;
};
int main()
{
struct XuanMin xm[3];
struct XuanMin max;
int feiPiao = 0;
int i;
int len;
int j;
int mark = 0;
int total = 5;
char tmpName[32];
//初始化选民信息
len = sizeof(xm)/sizeof(xm[0]);
for(i = 0; i<len; i++){
xm[i].tickets = 0;
printf("请输入第%d个选民的名字:\n",i+1);
scanf("%s",xm[i].name);
}
//唱票环节
for(i=0;i<5;i++){
mark = 0;
printf("请输入你投给谁:\n");
memset(tmpName,'\0',sizeof(tmpName)); //每次清空一下
scanf("%s",tmpName);//输入选中的选民名字,像拆开一个选票,看到名字一样
for(j = 0;j<len; j++){ //拿到名字,对应候选人票数加1
if(strcmp(tmpName, xm[j].name) == 0){
xm[j].tickets++;
mark = 1;
}
}
if(mark == 0){
printf("没有此候选人,放弃\n");
feiPiao++;
}
}
//公布结果
for(i=0;i<len;i++){
printf("名字:%s,票数:%d\n",xm[i].name,xm[i].tickets);
}
max = xm[0];
for(i=1;i<len;i++){
if(max.tickets < xm[i].tickets){
max = xm[i];
}
}
printf("%s以%d票当选!!废票是%d\n",max.name,max.tickets,feiPiao);
}