#include<conio.h>
struct hxr
{
int m
int point
} hxr[3]//选票结构体
void main()
{
int i=0,j=0,k,temp=0
char x,y,z
struct hxr hxr[3]
for(i=0i<3i++)//初始化选票结构体
{
hxr[i].m=i
hxr[i].point=0
}
printf("请输入投票总人数\n")
scanf("%d",&k)
printf("请输入投票\n")
getchar()
for(i=1i<=ki++)
{
scanf("%c%c%c",&x,&y,&z) //输入选票
getchar()
if(x!=y&&x!=z&&y!=z)//3个选票不能相同否则为无效选票
{
hxr[0].point+=(x=='a'?5:(y=='a'?3:(z=='a'?2:0))) //统计a的得票数,切输入3个选票从左到右得分分别是5.3.2
hxr[1].point+=(x=='b'?5:(y=='b'?3:(z=='b'?2:0)))
hxr[2].point+=(x=='c'?5:(y=='c'?3:(z=='c'?2:0)))
printf(" point: %d %d %d\n",hxr[0].point,hxr[1].point,hxr[2].point) //输出a,b,c的得分
continue
}
printf("此票无效\n")
}
for(i=0i<3i++)//分别输出a,b,c的得分
{
if(temp<hxr[i].point)
{
temp=hxr[i].point
j='a'+i
}
printf("people %c point %d\n",'a'+hxr[i].m,hxr[i].point)
}
if(((hxr[0].point==hxr[1].point)&&hxr[0].point>=hxr[2].point&&hxr[1].point>=hxr[2].point ) ||( (hxr[0].point==hxr[2].point)&&hxr[0].point>=hxr[1].point&&hxr[2].point>=hxr[1].point) ||((hxr[1].point==hxr[2].point)&&hxr[1].point>=hxr[0].point&&hxr[2].point>=hxr[0].point))
printf("重新投票\n")
else
{ printf("祝贺%c当选冠军\n",j) }
getchar()
}
#define PRT(j,k) printf("j的票数为%d",k); 这里你如果想要J显示你想要的内容的话直接 把j放在双引号的外面就可以了, #define PRT(j,k) printf(j“的票数为%d",k)但是这里注意的是你传入的j的值就一定要是字符串形式的,就比如 调用PRT(”jack“,10) 那么显示出来就会是 jack的票数为10 调试了一下发现要把hxr定义为hxr[2]才行 想了下也就是hxr要把\0也接收到才行 首先你定义hxr为char型,一个char型,你需要使用 %c 去接受,改成scanf("%c",&hxr); 还有 scanf以后注意谨慎使用,用多了以后你会发现 scanf会很容出问题。#include"stdio.h"#include"string.h"
struct People
{
char name[20]
int count
}leader[3]={"zhang",0,"li",0,"sun",0}
void main()
{
char leader_name[20]
int i,j
for(i=1i<=10i++)
{
scanf("%s",leader_name)
for(j=0j<3j++)
if(strcmp(leader_name,leader[j].name)==0)
leader[j].count++
}
printf("the result:\n")
for(i=0i<3i++)
printf("%5s:%d\n",leader[i].name,leader[i].count)
}