其实是这个代码有问题,但我看不出,求解答
源代码如下:#include <iostream>
#include <stdio.h>
#include<malloc.h>
#define N 9
using namespace std;
typedef struct node{
int num;
char name[20];
int sum;
}vote[N+1];
vote *p;
int number;
void xs(){
int i=1;
int n;
p=(vote*)malloc(sizeof(vote));
cout<<"请输入选手的数量:";
cin>>n;
number=n;
cout<<"请输入"<<n<<"名选手的编号和姓名:"<<endl;
while (n--)
{
cin>>p[i]->num>>p[i]->name;
i++;
}
cout<<"选手信息如下:"<<endl;
cout<<" 编号 姓名"<<endl;
for(i=1;i<=number;i++)
{
cout<<p[i]->num<<" "<<p[i]->name<<endl;
}
}
void toupiao()
{
int i,n;
for( i=1;i<=number;i++){
p[i]->sum=0;}
cout<<"请观众通过按键进行投票,按'1'对1号选手投票,按'2'对2号选手投票,以此类推,以按'0'作为投票结束标志"<<endl;
while (1)
{
cin>>n;
if (n==0) break;
while(n<1||n>number)
{cout<<"不存在此选手,请重新输入:";
cin>>n;}
p[n]->sum ++;
}
cout<<"投票完成!"<<endl;
}
void shellsort(vote *R,int n ){
int i,j,d;
for (d=n/2;d>=1;d=d/2){
for (i=d+1;i<=n;i++)
{
*R[0]=*R[i];
for(j=i-d;j>0&&R[j]->sum>R[0]->sum;j=j-d)
*R[j+d]=*R[j];
*R[j+d]=*R[0];
}
}
}
void main(){
int n,i;
while(1){
cout<<"1.输入选手信息"<<endl;
cout<<"2.观众投票"<<endl;
cout<<"3.比赛结果"<<endl;
cout<<"0.退出"<<endl;
cout<<"请输入你要选择的操作序号,按回车键确认:"<<endl;
cin>>n;
switch (n){
case 1:
xs();
break;
case 2:
toupiao();
cout<<"编号 姓名 票数 "<<endl;
for( i=1;i<=number;i++){
cout<<p[i]->num<<" "<<p[i]->name<<" "<<p[i]->sum<<endl;}
break;
case 3:
shellsort(p,number);
int t=1;
cout<<"名次 姓名 票数 "<<endl;
for( i=number;i>=1;){
for(int e=i;p[e]->sum==p[e-1]->sum;e--){
cout<<t<<" "<<p[e]->name<<" "<<p[e]->sum<<endl;}
cout<<t<<" "<<p[e]->name<<" "<<p[e]->sum<<endl;
t++;i=e-1;}
}
}
}
如果结构体中N+1改为N,那就出现下面这张情况,为什么