#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);
如有帮助,请采纳一下,谢谢。