编程统计候选人的得票数。设有3个候选人zhang、li、wang(候选人姓名不区分大小写),10个选民,选民每次输入一个得票的候选人的名字,若选民输错候选人姓名,则按废票处理。选民投票结束后程序自动显示各候选人的得票结果和废票信息。要求用结构体数组candidate表示3个候选人的姓名和得票结果。 例如: Input vote 1:li Input vote 2:li Input vote 3:Zhang Input vote 4:wang Input vote 5:zhang Input vote 6:Wang Input vote 7:Zhang Input vote 8:wan Input vote 9:li Input vote 10:lii Election results: li:3 zhang:3 wang:2 Wrong election:2 输入格式: "Input vote %d:" "%s" 输出格式: "Election results:\n" "%8s:%d\n" "Wrong election:%d\n"
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#define MAXN 10
#define MAXP 3
struct Candidat
{
char name[10];
int ticket;
};
char *toUpper (char *str);
int main (void)
{
struct Candidat candidate[MAXP] = {{"zhang", 0}, {"li", 0}, {"wang", 0}};
int wrong = 0;
int i;
for (i = 0; i < MAXN; i ++)
{
printf ("Input vote %d:", i + 1);
char vote[10];
scanf ("%s", vote);
bool bFlag = false;
if (strcmp (toUpper (vote), "ZHANG") == 0)
{
candidate[0].ticket ++;
bFlag = true;
}
if (strcmp (toUpper (vote), "LI") == 0)
{
candidate[1].ticket ++;
bFlag = true;
}
if (strcmp (toUpper (vote), "WANG") == 0)
{
candidate[2].ticket ++;
bFlag = true;
}
if (bFlag == false)
{
wrong ++;
}
}
printf ("Election results:\n");
printf ("%8s:%d\n", candidate[1].name, candidate[1].ticket);
printf ("%8s:%d\n", candidate[0].name, candidate[0].ticket);
printf ("%8s:%d\n", candidate[2].name, candidate[2].ticket);
printf ("Wrong election:%d\n", wrong);
return 0;
}
char
*toUpper (char *str)
{
char *p = str;
while (*p != '\0')
{
if (*p >= 'a' && *p <= 'z')
{
*p -= 32;
}
p ++;
}
return str;
}
(完全一样就离谱)