问题遇到的现象和发生背景
编程统计候选人的得票数。有若干位候选人(n<=10),候选人姓名从键盘输入(姓名最长为9个字节),若干位选民,选民每次输入一个得票的候选人的名字(姓名最长为9个字节),若选民输错候选人姓名,则按废票处理。程序自动统计各候选人的得票结果,并按照得票数由高到低的顺序排序。最后输出各选票人得票结果和废票信息。
输入格式:
先输入候选人人数n和n名候选人姓名,再输入选民人数m和m位选民的选票。
输出格式:
先根据选票结果由高到低输出各候选人得票结果,再根据废票情况输出废票信息(换行
后,输出提示信息“invalid vote:”,再输出废票信息);若没有废票,输出提示信息“all are valid!”。
输入样例1:
在这里给出一组输入。例如:
3
zhang
li
wang
9
wang
zhang
zhuang
li
liao
zhang
wang
wang
wang
输出样例1:
在这里给出相应的输出。例如:
wang:4
zhang:2
li:1
invalid vote:
zhuang
liao
问题相关代码,请勿粘贴截图
#include <stdio.h>
#include<string.h>
struct awp {
int c;//票数
char name[10];//候选人
};
struct awp stud[10];
int main()
{
struct awp temp;//投票的签
struct awp cat[9];//用于放入空票签
int n,m,max,num;
int i,flog=0,j,l=0;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%s",stud[i].name);//输入候选人
scanf("%d",&m);
for(j=0;j<m;j++)
{
scanf("%s",temp.name);//输入票数
for(i=0;i<n;i++)
{
if(strcmp(temp.name,stud[i].name)==0)//如果投票的签等于投票人,投票数+1;
{
stud[i].c++;
}
else //如果投票签没有这个人,把他放入空票签
{
flog=1;
strcpy(cat[l].name,temp.name);
l++;
}
}
}
for(i=0;i<n-1;i++)//对票数排序
{
for(j=0;j<n-1-i;j++)
{
if(stud[j].c<stud[j+1].c)
{
temp=stud[j];
stud[j]=stud[j+1];
stud[j+1]=temp;
}
}
}
for(i=0;i<n;i++)//输出票数和候选人
{
printf("%s:%d\n",stud[i].name,stud[i].c);
}
if(flog==1)//如果有空票,输入空票的姓名
{
printf("invalid vote:\n");
for(i=0;i<l;i++)
{
printf("%s\n",cat[i].name);
}
}
else if(flog==0)//如果没有空票
printf("all are valid!");
return 0;
}
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果
帮我原代码上改一下,指出我的问题。