鱼C论坛

 找回密码
 立即注册
查看: 1008|回复: 5

[已解决]结构体数组投票问题

[复制链接]
发表于 2020-8-2 15:04:02 | 显示全部楼层 |阅读模式

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

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

x
#include <stdio.h>
#include <stdlib.h>

#define NUM 4

int main(void)
{
        char *name[10];
        int i = 0, j;

        struct person
        {
                char *name;
                int votenum;
        }candidate[4] = {{"小甲鱼", 0}, {"杨幂", 0}, {"范冰冰", 0}, {"莫丁丁", 0}};

        printf("欢迎进入良好公民评选投票系统:()\n\n");
        printf("候选人有:%4s,%4s,%4s,%4s(路人甲)\n\n", candidate[NUM-4].name, candidate[NUM-3].name, candidate[NUM-2].name, candidate[NUM-1].name);
       
        while (i <= 9)
        {
                printf("第 %d 位投票, 请写下支持的候选人名字: ", i+1);
                scanf("%s", name+i);
                if (name[i] == candidate[NUM-4].name)
                {
                        candidate[NUM-4].votenum++;
                }
                else if(name[i] == candidate[NUM-3].name)
                {
                        candidate[NUM-3].votenum++;
                }
                else if(name[i] == candidate[NUM-2].name)
                {
                        candidate[NUM-2].votenum++;
                }
                else
                {
                        candidate[NUM-1].votenum++;
                }
                i++;
        }
        printf("\n");

        for(j = 0; j < NUM; j++)
        {
                printf("%3s 同学得票数为: %d\n", candidate[j].name, candidate[j].votenum);
        }

        printf("\n本次投票活动的胜利者是: %s\n\n", candidate[NUM-4].name);

        system("pause");

        return 0;
}

该代码运行时,为什么最后统计的数只有最后一个名额叠加了,这个while循环问题在哪?
最佳答案
2020-8-2 15:38:09
字符串用strcmp比较,if 里一直为假,else 的时候就直接运行了,
最后也没有比较得票
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-8-2 15:22:50 From FishC Mobile | 显示全部楼层
字符串比较用strcmp吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-2 15:38:09 | 显示全部楼层    本楼为最佳答案   
字符串用strcmp比较,if 里一直为假,else 的时候就直接运行了,
最后也没有比较得票
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-2 17:43:15 | 显示全部楼层
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define NUM 4

int main(void)
{
        char *name[10];
        int i =0,j = 0;

        struct person
        {
                char *name;
                int votenum;
        }candidate[4] = {{"小甲鱼", 0}, {"杨幂", 0}, {"范冰冰", 0}, {"莫丁丁", 0}};

        printf("欢迎进入良好公民评选投票系统:()\n\n");
        printf("候选人有:%4s,%4s,%4s,%4s(路人甲)\n\n", candidate[NUM-4].name, candidate[NUM-3].name, candidate[NUM-2].name, candidate[NUM-1].name);
       
        while (i <= 9)
        {
                printf("第 %d 位投票, 请写下支持的候选人名字: ", i+1);
                scanf("%s", &name[i]);
                if (strcmp(name[i],candidate[NUM-4].name) == 0)
                {
                        candidate[NUM-4].votenum++;
                }
                else if(strcmp(name[i],candidate[NUM-3].name) == 0)
                {
                        candidate[NUM-3].votenum++;
                }
                else if(strcmp(name[i],candidate[NUM-2].name) == 0)
                {
                        candidate[NUM-2].votenum++;
                }
                else if(strcmp(name[i],candidate[NUM-1].name) == 0)
                {
                        candidate[NUM-1].votenum++;
                }
                else
                {
                        continue;
                }
                 
                i++;
               
        }
        printf("\n");

        for(; j < NUM; j++)
        {
                printf("%s  同学得票数为: %d\n", candidate[j].name, candidate[j].votenum);
        }

        i = 0;
        if (candidate[i].votenum > candidate[i+1].votenum && candidate[i].votenum > candidate[i+2].votenum && candidate[i].votenum > candidate[i+3].votenum )
        {
                printf("\n本次投票活动的胜利者是: %s\n\n", candidate[i].name);
        }
        else if (candidate[i+1].votenum > candidate[i+2].votenum && candidate[i+1].votenum > candidate[i+3].votenum)
        {
                printf("\n本次投票活动的胜利者是: %s\n\n", candidate[i+1].name);
        }
        else if (candidate[i+2].votenum > candidate[i+3].votenum)
        {
                printf("\n本次投票活动的胜利者是: %s\n\n", candidate[i+2].name);
        }
        else
        {
                printf("\n本次投票活动的胜利者是: %s\n\n", candidate[i+3].name);
        }

        system("pause");

        return 0;
}

现在是循环不了了是什么情况???
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-2 19:26:59 | 显示全部楼层
兔比南博万 发表于 2020-8-2 17:43
#include
#include
#include
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. #define NUM 4

  5. int main(void)
  6. {
  7.     char name[10];
  8.     int i = 0, j = 0;

  9.     struct person
  10.     {
  11.         
  12.         const char* name;
  13.         int votenum;
  14.     }candidate[4] = { {"小甲鱼", 0}, {"杨幂", 0}, {"范冰冰", 0}, {"莫丁丁", 0} };

  15.     printf("欢迎进入良好公民评选投票系统:()\n\n");
  16.     printf("候选人有:%4s,%4s,%4s,%4s(路人甲)\n\n", candidate[NUM - 4].name, candidate[NUM - 3].name, candidate[NUM - 2].name, candidate[NUM - 1].name);

  17.     for (; i <= 9; i++)
  18.     {
  19.         printf("第 %d 位投票, 请写下支持的候选人名字: ", i + 1);
  20.         scanf("%s", name);
  21.         if (strcmp(name, candidate[NUM - 4].name) == 0)
  22.         {
  23.             candidate[NUM - 4].votenum++;
  24.         }
  25.         else if (strcmp(name, candidate[NUM - 3].name) == 0)
  26.         {
  27.             candidate[NUM - 3].votenum++;
  28.         }
  29.         else if (strcmp(name, candidate[NUM - 2].name) == 0)
  30.         {
  31.             candidate[NUM - 2].votenum++;
  32.         }
  33.         else if (strcmp(name, candidate[NUM - 1].name) == 0)
  34.         {
  35.             candidate[NUM - 1].votenum++;
  36.         }
  37.         else
  38.         {
  39.             continue;
  40.         }

  41.         // i++;

  42.     }
  43.     printf("\n");

  44.     for (; j < NUM; j++)
  45.     {
  46.         printf("%s  同学得票数为: %d\n", candidate[j].name, candidate[j].votenum);
  47.     }

  48.     i = 0;
  49.     if (candidate[i].votenum > candidate[i + 1].votenum && candidate[i].votenum > candidate[i + 2].votenum && candidate[i].votenum > candidate[i + 3].votenum)
  50.     {
  51.         printf("\n本次投票活动的胜利者是: %s\n\n", candidate[i].name);
  52.     }
  53.     else if (candidate[i + 1].votenum > candidate[i + 2].votenum && candidate[i + 1].votenum > candidate[i + 3].votenum)
  54.     {
  55.         printf("\n本次投票活动的胜利者是: %s\n\n", candidate[i + 1].name);
  56.     }
  57.     else if (candidate[i + 2].votenum > candidate[i + 3].votenum)
  58.     {
  59.         printf("\n本次投票活动的胜利者是: %s\n\n", candidate[i + 2].name);
  60.     }
  61.     else
  62.     {
  63.         printf("\n本次投票活动的胜利者是: %s\n\n", candidate[i + 3].name);
  64.     }

  65.     system("pause");

  66.     return 0;
  67. }
复制代码
改为这样即可


小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-2 19:35:07 | 显示全部楼层
兔比南博万 发表于 2020-8-2 17:43
#include
#include
#include

好像没我啥事了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-11 02:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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