请帮忙看下,为什么返回值不正确。
题目描述:设有代号为’a’,’b’,’c’的三个足球先生候选人,根据投票者在选票上对他们编号的填写顺序分别记分5,3,2。 请编程从键盘上输入投票人数及投票结果,统计他们的得分,并输出哪位当选足球先生。注意:若同一张票上写有两个相同的代号,则显示“此票无效”,若最终前两名得分相同,则显示“对该两位候选人重新投票”,否则显示三个候选者得分并输出“祝贺X当选冠军!”。
程序代码:#include<stdio.h>
#include<string.h>
int i,j,n,a,b,c,err;
char sh[10];
char can[20][10]; //can is short for candidate
int vote(num){
ERROR2:
a=0;b=0;c=0;
for(j=1;j<num+1;j++){
printf("请输入第%d个人的投票:",j);
if(j==1) fflush(stdin); //getchar(); 在goto上来后效果不好
ERROR1:
gets(sh);
if(sh[0]!='a'&&sh[0]!='b'&&sh[0]!='c'\
||sh[1]!='a'&&sh[1]!='b'&&sh[1]!='c'\
||sh[2]!='a'&&sh[2]!='b'&&sh[2]!='c'){
printf("第%d个人的投票有误,请重新输入:");
goto ERROR1;
}
if(sh[0]==sh[1]||sh[0]==sh[2]||sh[1]==sh[2]){
printf("第%d个人的投票有误,请重新输入:");
goto ERROR1;
}
//printf("%c",sh[3]);
strcpy(can[j],sh);
}
for(j=1;j<num+1;j++) puts(can[j]);
for(j=1;j<num+1;j++){
//------计算a得分------
if(can[j][0]=='a') a=a+5;
if(can[j][1]=='a') a=a+3;
if(can[j][2]=='a') a=a+2;
//------计算b得分------
if(can[j][0]=='b') b=b+5;
if(can[j][1]=='b') b=b+3;
if(can[j][2]=='b') b=b+2;
//------计算c得分------
if(can[j][0]=='c') c=c+5;
if(can[j][1]=='c') c=c+3;
if(can[j][2]=='c') c=c+2;
}
printf("a=%d,b=%d,c=%d\n",a,b,c);
if(a>b&&a>c) printf("恭喜a当选冠军!\n");
if(b>a&&b>c) printf("恭喜b当选冠军!\n");
if(c>b&&c>a) printf("恭喜c当选冠军!\n");
if(a==b&&b==c&&a==c){
printf("三者得分完全相同,将重新投票。\n");
fflush(stdin);
goto ERROR2;
if(a==b&&a>c) err=11; //a、b得票相同且高于c
if(a==c&&a>b) err=13; //a、c得票相同且高于b
if(b==c&&a>b) err=23; //b、c得票相同且高于a
return err;
}
}
int main(){
printf("一共多少人投票?\n");
ERROR3:
scanf("%d",&n);
if(n<1||n>21){
printf("你输入的数据不合法,请重新输入:");
fflush(stdin);
goto ERROR3;
}
err=vote(n);
printf("%d\n",err);
return 0;
}
代码还没写完,我知道写的不好。
我希望通过自定义函数返回的错误ID(err的值)判断abc中有哪两个数是相等的,但是返回的值总是等于a的值。
比如输入2
在输入abc
在输入bac
返回的值是8而不是11。
请指教。


