编程统计候选人的得票数。设有3个候选人zhang、li、wang(候选人姓名不区分大小写),10个选民,选民每次输入一个候选人的名字,若选民输错候选人的姓名,则按废票处理。选民投票结束后,程序自动显示各候选人的得票结果和废票数,要求利用结构体数组表示3个候选人的姓名和得票结果,将最终的统计结果显示输出并写入文本文件中。
时间: 2024-02-17 09:00:48 浏览: 20
好的,我可以帮你解决这个问题。以下是一个示例代码:
```c
#include <stdio.h>
#include <string.h>
#define CANDIDATE_NUM 3
#define VOTER_NUM 10
typedef struct {
char name[20];
int votes;
} Candidate;
int main() {
Candidate candidates[CANDIDATE_NUM] = {
{"zhang", 0},
{"li", 0},
{"wang", 0}
};
int invalid_votes = 0;
char input[20];
for (int i = 0; i < VOTER_NUM; i++) {
printf("Please enter the candidate name for your vote: ");
scanf("%s", input);
int candidate_found = 0;
for (int j = 0; j < CANDIDATE_NUM; j++) {
if (strcasecmp(input, candidates[j].name) == 0) {
candidates[j].votes++;
candidate_found = 1;
break;
}
}
if (!candidate_found) {
invalid_votes++;
}
}
printf("\nVoting result:\n");
for (int i = 0; i < CANDIDATE_NUM; i++) {
printf("%s: %d votes\n", candidates[i].name, candidates[i].votes);
}
printf("Invalid votes: %d\n", invalid_votes);
// write results to file
FILE* fp = fopen("voting_results.txt", "w");
for (int i = 0; i < CANDIDATE_NUM; i++) {
fprintf(fp, "%s: %d votes\n", candidates[i].name, candidates[i].votes);
}
fprintf(fp, "Invalid votes: %d\n", invalid_votes);
fclose(fp);
return 0;
}
```
这个程序使用了一个结构体数组来表示3个候选人的姓名和得票结果。选民每次输入一个候选人的名字,程序会遍历结构体数组,寻找匹配的候选人,并增加其得票数。如果选民输错了候选人的姓名,则废票数加1。最终,程序会输出各候选人的得票结果和废票数,并将统计结果写入文本文件中。
注意,为了忽略候选人姓名的大小写差异,本程序使用了 `strcasecmp` 函数来进行比较。如果你的编译器不支持这个函数,可以使用 `stricmp` 或 `strcmpi` 替代。