|
楼主 |
发表于 2019-7-17 11:34:35
|
显示全部楼层
已解决
修复代码:
#include<stdio.h>
#include<string.h>
main()
{
struct ABCD
{
int vote;
char name[64];
} candidate[4]= {{0,"Alice"},{0,"Billy"},{0,"Charles"},{0,"Dick"}};
printf("候选人名单:\nAlice\tBilly\nCharles\tDick\n");
printf("输入你支持的候选人\n");
char a[64];
int trigger=0;
for(int i=0; i<=3; i++,trigger=0) //修改投票次数
{
gets(a);
for(int b=0; b<=3; b++)
{
if(strcmp(a,candidate[b].name)==0)
{
candidate[b].vote++;
trigger++;
}
}
if(trigger==0)
{
printf("此人不在候选名单,请重新输入\n");
i--;
}
}
/*****
*排序*
*****/
printf("统计完成:\n");
char *sort[4]= {&candidate[0].name,&candidate[1].name,&candidate[2].name,&candidate[3].name};
int *sort1[4]= {&candidate[0].vote,&candidate[1].vote,&candidate[2].vote,&candidate[3].vote};
for(int b=3; b>=0; b--)
{
for(trigger=0; trigger<=b&&trigger+1<=b; trigger++)
{
if(*sort1[trigger]<*sort1[trigger+1])
{
int *AA;
char *BB;
AA=sort1[trigger];
sort1[trigger]=sort1[trigger+1];
sort1[trigger+1]=AA;
BB=sort[trigger];
sort[trigger]=sort[trigger+1];
sort[trigger+1]=BB;
}
}
}
/********
*输出结果*
********/
printf("姓名\t\t票数\n");
int d;
for(d=0; d<=3; d++)
{
printf("%s\t\t%d\n",sort[d],*sort1[d]);
}
printf("输出完毕");
getchar();
}
原代码出现的bug:
1 排序的冒泡算法取到了sort[3]以外,到了sort[4]
2 最后的输出函数第一个指针是字符指针,加了"*"取值符
排序里面的trigger变量是懒得再定义一个新变量直接在上面扒了一个下来
希望其他人不要犯这样的错误,卡这个bug卡了3天呐 |
|