关于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;
}

c

1个回答

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

qq_38204305
duck__lu 就是什么都没变
2 年多之前 回复
lzl569029783
stonerebel 回复qq_38204305: 出现的错误是什么情况
2 年多之前 回复
qq_38204305
duck__lu 但是我测试的时候相同也不行(我就是想问问ID位数相同时哪错了,我知道我的程序漏洞太多了)
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!