为什么投票之后结果都显示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);}
}

 

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;
		}
	}
}

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

 

又看了一遍,发现了问题

 

 

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

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

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

p=leader;

Input(p, N)

p=leader;

Output(p,N);

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