兔比南博万 发表于 2020-8-2 18:01:36

结构体数组投票新问题

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

#define NUM 4

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

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

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

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

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

      system("pause");

      return 0;
}

运行时循环不了了是什么情况,这次while循环又是什么问题???

chxchxkkk 发表于 2020-8-2 18:39:43

本帖最后由 chxchxkkk 于 2020-8-2 18:44 编辑


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

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

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

//在程序最后system("pause");前加上这段
//释放malloc申请的内存
for (i=0; i<10; i++)
{
    if (name != NULL)
    {
      free(name);
      name = NULL;
    }
}

superbe 发表于 2020-8-2 18:43:35

本帖最后由 superbe 于 2020-8-2 18:48 编辑

把char *name; 改成char name,即用一个字符数组保存候选人名字。后面输入循环中相应修改。
下面注释的行是修改前的行,修改在下一行。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define NUM 4

int main(void)
{
    //char *name;
    char name;
    int i = 0, j = 0;

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

    printf("欢迎进入良好公民评选投票系统:()\n\n");
    printf("候选人有:%s, %s , %s, %s(路人甲)\n\n", candidate.name, candidate.name, candidate.name, candidate.name);

    while (i <= 9)
    {
      printf("第 %d 位投票, 请写下支持的候选人名字: ", i + 1);
      //scanf("%s", &name);
      scanf("%s", name);
      //if (strcmp(name, candidate.name) == 0)
      if (strcmp(name, candidate.name) == 0)
      {
            candidate.votenum++;
      }
      //else if (strcmp(name, candidate.name) == 0)
      else if (strcmp(name, candidate.name) == 0)
      {
            candidate.votenum++;
      }
      //else if (strcmp(name, candidate.name) == 0)
      else if (strcmp(name, candidate.name) == 0)
      {
            candidate.votenum++;
      }
      //else if (strcmp(name, candidate.name) == 0)
      else if (strcmp(name, candidate.name) == 0)
      {
            candidate.votenum++;
      }
      else
      {
            continue;
      }

      i++;

    }
    printf("\n");

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

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

    system("pause");

    return 0;
}

提交上去才发现楼上已回答过了。
页: [1]
查看完整版本: 结构体数组投票新问题