m0_51455672
2021-05-26 13:15
采纳率: 50%
浏览 23

为什么投票之后结果都显示0?

#include <stdio.h>
#define N 3
struct Person
{
char name[16];
int count;
} ;
void Input(struct Person *ld, int n); //输入n个候选人的基本信息
void Vote(struct Person *ld, int n); //对n个候选人进行投票
void Output(struct Person *ld, int n); //输出n个候选人的基本信息
int main(int argc, char *argv[])
{
struct Person leader[N];
struct Person *p;
p=leader;
Input(p, N);
Vote(p, N);
Output(p, N);
return 0;
}
void Input(struct Person *ld, int n)
{
int i;
printf("输入%d个候选人的基本信息:姓名\n", n);
for (i = 0; i < n; i++,ld++)
scanf("%s", ld->name);
}
void Vote(struct Person *ld, int n)
{

    int m, i, j; //m表示参加投票的人数
    char ename[16];
    printf("输入参加投票的人数:");
    scanf("%d", &m);
    printf("输入%d个参加投票人的投票情况\n", m);
    for (i = 0; i < m; i++,ld++)
    {
        ld->count = 0;
    }
    for (i = 0; i < m; i++)
    {
        scanf("%s", ename);

    for (j = 0; j < n; j++,ld++)
    {

        if (strcmp(ld->name, ename) == 0)
        ld->count+=1;
    }
    }


}
void Output(struct Person *ld, int n)
{
int i;
printf("输出%d个候选人的基本信息:姓名,票数\n", n);
for (i = 0; i < n; i++,ld++)
{printf("%s %d\n", ld->name, ld->count);}
}
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • 胖哥王老师 2021-05-26 13:39
    已采纳
    void Vote(struct Person *ld, int n)
    {
    	int m, i, j; 
    	char ename[16];
    	struct Person *tmp;
    
    	printf("输入参加投票的人数:");
    	scanf("%d", &m);
    
    	printf("输入%d个参加投票人的投票情况\n", m);
    	tmp=ld;
    
    	for (i = 0; i < n; i++,tmp++)
    	{
    		tmp->count = 0;
    	}
    
    	for (i = 0; i < m; i++)
    	{
    		scanf("%s", ename);
    
    		tmp=ld;
    		for (j = 0; j < n; j++,tmp++)
    		{
    			if (strcmp(tmp->name, ename) == 0)
    				tmp->count+=1;
    		}
    	}
    }

    刚才没看仔细,是这里的问题,指针被你用了一次,再用的时候,需要还原

    已采纳该答案
    打赏 评论
  • m0_51455672 2021-05-26 13:16

     

    打赏 评论
  • 胖哥王老师 2021-05-26 13:17

    又看了一遍,发现了问题

     

    打赏 评论
  • 秋杪 2021-05-26 13:46

     

    这几个函数中 你的指针p自加了好几次,后面都不是指向第一个了。而且结构体指针地址并不是连续的

    打赏 评论
  • qfl_sdu 2021-05-26 13:52

    Input(p, N)以后,p++了,指向最后的元素了,所以在Vote(p, N)的时候就是错误的指针操作。

    在Vote(p, N)和Output(p,N)前都应该把p重置,如下:

    p=leader;

    Input(p, N)

    p=leader;

    Output(p,N);

    如有帮助,请采纳一下,谢谢。

    打赏 评论

相关推荐 更多相似问题