鱼C论坛

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

结构体数组投票新问题

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

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

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

x
#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("候选人有:%s, %s , %s, %s(路人甲)\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;
}

运行时循环不了了是什么情况,这次while循环又是什么问题???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-2 18:39:43 | 显示全部楼层
本帖最后由 chxchxkkk 于 2020-8-2 18:44 编辑

  1. printf("第 %d 位投票, 请写下支持的候选人名字: ", i+1);
  2. scanf("%s", &name[i]);

  3. // 这里出错原因是char *name[10]是个指针数组,它的元素值是 char *,而name[i]是一个指针,没有给它分配内存空间,直接使用当然报错了。
  4. //修改如下,后可正常使用。

  5. printf("第 %d 位投票, 请写下支持的候选人名字: ", i+1);
  6. name[i] = malloc(sizeof(char) * 64);  //64也可以改成合适的大小
  7. scanf("%s", name[i]);

  8. //在程序最后system("pause");前加上这段
  9. //释放malloc申请的内存
  10. for (i=0; i<10; i++)
  11. {
  12.     if (name[i] != NULL)
  13.     {
  14.         free(name[i]);
  15.         name[i] = NULL;
  16.     }
  17. }
复制代码

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

使用道具 举报

发表于 2020-8-2 18:43:35 | 显示全部楼层
本帖最后由 superbe 于 2020-8-2 18:48 编辑

把char *name[10]; 改成char name[10],即用一个字符数组保存候选人名字。后面输入循环中相应修改。
下面注释的行是修改前的行,修改在下一行。
  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.     char name[10];
  9.     int i = 0, j = 0;

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

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

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

  46.         i++;

  47.     }
  48.     printf("\n");

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

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

  70.     system("pause");

  71.     return 0;
  72. }
复制代码


提交上去才发现楼上已回答过了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 00:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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