鱼C论坛

 找回密码
 立即注册
查看: 2801|回复: 1

写了个投票系统 运行后半段遇未知bug

[复制链接]
发表于 2019-7-13 19:30:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 illvlli 于 2019-7-17 21:57 编辑

源代码
第57行有输出
第五十八行无输出,部分如下



---------------------------------------------------
  姓名                  票数

[ Process completed ( signal 11)- press Enter ]

---------------------------------------------------


爪机编译器


可以执行一个打印函数紧挨着的下一个打印函数却无法执行 直接signal 11就结束了
换了个编译器segmentation fault
有没有dalao啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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天呐
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-3 23:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表