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 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计