鱼C论坛

 找回密码
 立即注册
查看: 2417|回复: 2

[已解决]小甲鱼的结构体课后题投票系统,票数计数问题

[复制链接]
发表于 2018-2-22 02:38:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#include<string.h>
#define NUM 3    //3个候选者
#define NO 5    //5个投票者

struct candidate
{
        char name[10];
        int score;
}candidate[NUM]={{"小可爱", 0}, {"小甲鱼", 0}, {"路人甲", 0}};

void main()
{
        int i, j, max;
        char cand[10];
        int k=NO;
        printf("欢迎进入良好公民评选投票系统:\n\n");
        printf("候选人有:");
        for(i = 0;i < NUM; i++)
        {
                printf("%s ",candidate[i].name);
        }
        printf("\n\n");
        

        for(i=0; i < k; i++)
        {
                printf("第 %d 位投票,请写下支持的候选人的名字:", i+1);
                scanf("%s", &cand);

                if(strcmp( cand, candidate[i].name) ==0 )
                {
                        candidate[i].score++;                       //这里candidate[i].score++;为什么不能增加票数呀
                }
        }
        
        printf("\n\n");

        for(i = 0;i < NUM; i++)
        {
                printf("%s 同学得票数位:%d\n", candidate[i].name, candidate[i].score);
        }
        printf("\n");
        printf("本次投票活动的胜利者是:");
        max = candidate[0].score;
        for(i = 0;i < NUM; i++)  //求票数的最大值
        {
                if(max < candidate[i].score)
                {
                        max = candidate[i].score;
                }
        }
        for(i = 0;i < NUM; i++)  //打印票数最大值的人的名字
        {
                if(max == candidate[i].score)
                {
                        printf("%s\n", candidate[i].name);
                }
        }
}



360截图20180222023514093.jpg




请教各位,为什么票数一直不对,代码的中间那里candidate[i].score++;为什么不能计票数呀。



最佳答案
2018-2-22 05:12:24
for(i = 0; i < k; i++)
        {
                printf("第 %d 位投票,请写下支持的候选人的名字:", i + 1);
                scanf("%s", &cand);

                for(j = 0; j < NUM; ++j)
                {
                        if(strcmp(cand, candidate[j].name) == 0)
                        {
                                candidate[j].score++;                       //这里candidate[i].score++;为什么不能增加票数呀
                        }
                }
        }




        max = candidate[0].score;
        for(i = 0;i < NUM; i++)  //求票数的最大值
        {
                if(max < candidate[i].score)
                {
                        max = candidate[i].score;
                }
        }
        for(i = 0;i < NUM; i++)  //打印票数最大值的人的名字
        {
                if(max == candidate[i].score)
                {
                        printf("%s\n", candidate[i].name);
                }
        }
这里两次循环,没有必要
#include<stdio.h>
#include<string.h>
#define NUM 3    //3个候选者
#define NO 5    //5个投票者

struct candidate
{
        char name[10];
        int score;
}candidate[NUM] = {{"小可爱", 0}, {"小甲鱼", 0}, {"路人甲", 0}};

int main(void)
{
        int i, j;
        char cand[10];
        int k = NO;
        printf("欢迎进入良好公民评选投票系统:\n\n");
        printf("候选人有:");
        for(i = 0; i < NUM; i++)
        {
                printf("%s ", candidate[i].name);
        }
        printf("\n\n");


        for(i = 0; i < k; i++)
        {
                printf("第 %d 位投票,请写下支持的候选人的名字:", i + 1);
                scanf("%s", &cand);

                for(j = 0; j < NUM; ++j)
                {
                        if(strcmp(cand, candidate[j].name) == 0)
                        {
                                candidate[j].score++;                       //这里candidate[i].score++;为什么不能增加票数呀
                        }
                }
        }

        printf("\n\n");

        for(i = 0; i < NUM; i++)
        {
                printf("%s 同学得票数位:%d\n", candidate[i].name, candidate[i].score);
        }
        printf("\n");
        printf("本次投票活动的胜利者是:");
        
        
        struct candidate *max = &candidate[0];
        for(i = 1; i < NUM; i++)        // 求票数的最大值
        {
                if(max->score < candidate[i].score)
                {
                        max = &candidate[i];
                }
        }
        
        printf("%s\n", max->name);        // 打印票数最大值的人的名字

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-2-22 05:12:24 | 显示全部楼层    本楼为最佳答案   
for(i = 0; i < k; i++)
        {
                printf("第 %d 位投票,请写下支持的候选人的名字:", i + 1);
                scanf("%s", &cand);

                for(j = 0; j < NUM; ++j)
                {
                        if(strcmp(cand, candidate[j].name) == 0)
                        {
                                candidate[j].score++;                       //这里candidate[i].score++;为什么不能增加票数呀
                        }
                }
        }




        max = candidate[0].score;
        for(i = 0;i < NUM; i++)  //求票数的最大值
        {
                if(max < candidate[i].score)
                {
                        max = candidate[i].score;
                }
        }
        for(i = 0;i < NUM; i++)  //打印票数最大值的人的名字
        {
                if(max == candidate[i].score)
                {
                        printf("%s\n", candidate[i].name);
                }
        }
这里两次循环,没有必要
#include<stdio.h>
#include<string.h>
#define NUM 3    //3个候选者
#define NO 5    //5个投票者

struct candidate
{
        char name[10];
        int score;
}candidate[NUM] = {{"小可爱", 0}, {"小甲鱼", 0}, {"路人甲", 0}};

int main(void)
{
        int i, j;
        char cand[10];
        int k = NO;
        printf("欢迎进入良好公民评选投票系统:\n\n");
        printf("候选人有:");
        for(i = 0; i < NUM; i++)
        {
                printf("%s ", candidate[i].name);
        }
        printf("\n\n");


        for(i = 0; i < k; i++)
        {
                printf("第 %d 位投票,请写下支持的候选人的名字:", i + 1);
                scanf("%s", &cand);

                for(j = 0; j < NUM; ++j)
                {
                        if(strcmp(cand, candidate[j].name) == 0)
                        {
                                candidate[j].score++;                       //这里candidate[i].score++;为什么不能增加票数呀
                        }
                }
        }

        printf("\n\n");

        for(i = 0; i < NUM; i++)
        {
                printf("%s 同学得票数位:%d\n", candidate[i].name, candidate[i].score);
        }
        printf("\n");
        printf("本次投票活动的胜利者是:");
        
        
        struct candidate *max = &candidate[0];
        for(i = 1; i < NUM; i++)        // 求票数的最大值
        {
                if(max->score < candidate[i].score)
                {
                        max = &candidate[i];
                }
        }
        
        printf("%s\n", max->name);        // 打印票数最大值的人的名字

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-22 17:21:03 | 显示全部楼层
人造人 发表于 2018-2-22 05:12
这里两次循环,没有必要

好 感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-1 15:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表