请帮忙看下,为什么返回值不正确。
题目描述:设有代号为’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。
请指教。