C语言中结构图数组问题

请问如何编程统计候选人的得票数。设有3个候选人zhang、li、wang,10个选民,选民每次输入一个候选人的名字,若选民输错候选人的姓名,则按废票处理。选民投票结束后,程序自动显示各候选人的得票结果和废票数,要求利用结构体数组表示3个候选人的姓名和得票结果,将最终的统计结果显示输出并写入文本文件中。

定义候选人结构体,包含姓名、得票数,废票数用10-得票数,输入统计即可。
运行结果:

img

结果写入到文件:

img

代码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//定义候选人结构体
typedef struct _player
{
    char name[20]; //姓名
    int tickets; //得票数
}Player;


int main()
{
    //初始化3个候选人
    Player player[3] = { {"zhang",0},{"li",0},{"wang",0} }; 
    int i = 0, j;
    int lose = 0; //废票数
    char name[20] = { 0 };
    int flag = 0;
    FILE* fp = 0;
    for (i = 0; i < 10; i++)
    {
        printf("请第%d位选民输入候选人名字:",i+1);
        scanf("%s", name); 
        flag = 0;//用来判断姓名是否输入错误
        for (j = 0; j < 3; j++)
        {
            if (strcmp(player[j].name, name) == 0)
            {
                flag = 1;//找到候选人
                player[j].tickets += 1; //票数+1
            }
        }
        if (flag == 0) //废票
            lose += 1;
    }
    //输出结果
    for (i = 0; i < 3; i++)
        printf("%s得票数:%d\n", player[i].name, player[i].tickets);
    printf("废票数:%d\n",lose);

    //结果保存到文件
    fp = fopen("record.txt", "w");
    for (i = 0; i < 3; i++)
        fprintf(fp,"%s得票数:%d\n", player[i].name, player[i].tickets);
    fprintf(fp,"废票数:%d\n", lose);
    fclose(fp);
    return 0;
}



您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/754740
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:编写程序计算图形的面积。程序可计算圆形、长方形、正方形的面积,运行时先提示用户选择图形的类型,然后,对圆形要求用户输入半径值,对长方形要求用户输入长和宽的值,对正方形要求用户输入边长的值,计算出面积
  • 除此之外, 这篇博客: 编程统计候选人的得票数。设有3个候选人zhang、li、wang(候选人姓名不区分大小写),10个选民,选民每次输入一个得票的候选人的名字,若选民输错候选人姓名,则按废票处理。选民投票结束后程序自动显中的 代码: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    #define _CRT_SECURE_NO_WARNINGS 1
    #include<stdio.h>
    #include<string.h>
    struct Candidate
    {
    	char name[10];
    	int count;
    };
    int main()
    {
    	struct Candidate arr[3] = {
    		"li",0,"zhang",0,"wang",0
    	};
    	int i = 0, j = 0;
    	char s[10];
    	int wrong = 0;
    	int flag = 0;
    	for (i = 0; i < 10; i++)
    	{
    		flag = 0;
    		printf("Input vote %d:", i + 1);
    		scanf("%s", s);
    		for (j = 0; j < 3; j++)
    		{
    			if (strcasecmp(arr[j].name, s) == 0)
    				{
    				    arr[j].count++;
                        flag = 1;
    				}
    		}
    		if (flag == 0)
    		{
    			wrong++;
    		}
    	}
    
    	printf("Election results:\n");
    	for (i = 0; i < 3; i++)
    	{
    		printf("%8s:%d\n", arr[i].name, arr[i].count);
    	}
    
    		printf("Wrong election:%d\n", wrong);
    }
    
    
  • 您还可以看一下 李月喜老师的企业微信开发第三方应用开发篇课程中的 回调配置概述,回调签名验证及消息解密集成 小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    问题解决方案:

    由题目可知,需要统计3个候选人zhang、li、wang的得票数,每个选民会输入一个候选人的名字,如果选民输入的名字不是这3个候选人中的一个,则这张票将被视为废票。当选民投票结束时,程序应该自动显示每个候选人的得票结果以及废票数。利用结构体数组表示3个候选人的姓名和得票结果,并将最终的统计结果显示输出并写入文本文件中。

    首先,定义结构体数组表示3个候选人的姓名和得票结果:

    typedef struct Candidate {
        char name[10];// 候选人姓名
        int num;// 候选人得票数
    }Candidate;
    

    然后,定义一个main函数,其中声明一个结构体数组candidates用于存储候选人的姓名和得票结果,遍历所有的选民输入的选票,如果选票是有效的,则为相应的候选人增加得票数,否则增加废票数。最后,遍历统计结果,将各个候选人的得票数和废票数输出到终端和一个txt文件中。

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    typedef struct Candidate {
        char name[10];// 候选人姓名
        int num;// 候选人得票数
    }Candidate;
    
    int main()
    {
        Candidate candidates[3] = {{"zhang",0},{"li",0},{"wang",0}};// 定义结构体数组表示3个候选人的姓名和得票结果
        int i, j, invalid = 0;//invalid用于记录废票的张数
        char vote[10];//用于存储选民输入的选票
    
        for (i = 0; i < 10; i++) {//遍历所有的选民输入的选票
            printf("第%d个选民请投票:\n", i + 1);
            scanf("%s", &vote);
            for (j = 0; j < 3; j++) {//如果选票是有效的,则为相应的候选人增加得票数
                if (strcmp(vote, candidates[j].name) == 0) {
                    candidates[j].num++;
                    break;
                }
            }
            if (j == 3) {//否则增加废票数
                invalid++;
            }
        }
        FILE *fp = NULL;//将统计结果输出到一个txt文件中
        fp = fopen("result.txt", "w");
        if (fp == NULL) {
            printf("无法打开文件\n");
            exit(1);
        }
        for (i = 0; i < 3; i++) {//遍历统计结果,将各个候选人的得票数和废票数输出到终端和一个txt文件中
            printf("%s 的得票数:%d\n", candidates[i].name, candidates[i].num);
            fprintf(fp, "%s 的得票数:%d\n", candidates[i].name, candidates[i].num);
        }
        printf("废票数:%d\n", invalid);
        fprintf(fp, "废票数:%d\n", invalid);
        fclose(fp);
        return 0;
    }
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^