duck__lu 2017-05-12 04:44 采纳率: 100%
浏览 719
已采纳

关于c的结构体的问题,跪求大神帮助

RT,主要是我的soar排序函数没有作用。
还有我的二分法BinarySerach的也没有作用。
我单步调试过好像是soar和BinarySearch里的strcmp那里出了问题,但是我确实不知道是什么问题
代码如下

 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LEN 10
#define SIZE 20

//职工的姓名和职工号
typedef struct staff{
    char name[LEN];
    char num[SIZE];
} STAFF;

void Input(STAFF *a);
void soar(STAFF *a);
int BinarySearch(char num[], STAFF *a);
int main(void)
{

    STAFF a[LEN];//存放员工信息
    char num[SIZE];//
    int get;

    Input(a);
    soar(a);

    printf("Please input the number you want:\n");
    gets(num);
    if ((get = BinarySearch(num, a)) != -1)
        printf("The number is %s and the name is %s.\n", a[get].num, a[get].name);
    else
        printf("There is not the person.\n");

    return 0;
}

//输入10个职工的姓名和职工号
void Input(STAFF *a)
{
    int i;

    for (i = 0; i < LEN; ++i)
    {
        printf("Please input the numbers and name of every staff.\n");
        scanf("%s %s", a[i].name, a[i].num);
        while (getchar() != '\n')
            continue;
    }
}

//按职工号由小到大顺序排序,姓名也随之调整
void soar(STAFF *a)
{
    int i, j;
    STAFF b;
        //冒泡排序
    for (i = 0; i < LEN - 1; i++)
    {
        for (j = 0; j < LEN - 1 - i; j++)
        {
            if (strcmp(a[j].num, a[j + 1].num) > 0)
            {
                b = a[j];
                a[j] = a[j + 1];
                a[j + 1] = b;
            }
        }
    }
}

//通过主函数输入的职工号,用二分法找到该员工
int BinarySearch(char num[], STAFF *a)
{
    int low = 0;
    int high = LEN - 1;
    int mid;

    while (high >= low)
    {
        mid = low + (high - low) / 2;
        if (strcmp(num, a[mid].num) > 0)
            low = mid + 1;
        else if ((strcmp(num, a[mid].num) < 0))
            high = mid - 1;
        else
            return mid;
    }

    return -1;
}

  • 写回答

1条回答 默认 最新

  • stonerebel 2017-05-12 08:21
    关注

    使用strcmp来对比ID的大小是不可靠的,如果ID的位数不同,可能出现大小对比错误的情况

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用