有人可以解释为什么它不会执行我的二分搜索中的最后一个 else if 语句吗

标签 c if-statement binary-search

当我运行它并尝试搜索结构中不存在的名称时,它不会执行 else if 语句,它不会执行任何操作。

if(first <= last) {

        while(first<= last){

            middle = (first + last)/2;

            if(strcmp(name, pSRecord[middle]->LastNames) == 0){

                printf("The Following Record Was Found: \nName: %s %s \nStudent ID: %d \nStudent Grade: %d \n", pSRecord[middle]->FirstNames, pSRecord[middle]->LastNames, pSRecord[middle]->IDNums, pSRecord[middle]->Marks);
                exit(0);

            } else if (strcmp(name, pSRecord[middle]->LastNames) > 0){

                first = middle + 1;

            } else if (strcmp(name, pSRecord[middle]->LastNames) < 0){

                last = middle - 1;

            }
        }
    } else  if{

        printf("No Record Found With The Last Name %s. \n", name);
        exit(0);

    }

最佳答案

虽然这甚至不应该编译,因为 (...} else if {...)

但忽略这一点,为什么你有 if(first <= last) 和 while(first <= last) ?

while(first <= last) 只能正常工作

你的代码应该是这样的

while(first<= last){

        middle = (first + last)/2;

        if(strcmp(name, pSRecord[middle]->LastNames) == 0){

            printf("The Following Record Was Found: \nName: %s %s \nStudent ID: %d \nStudent Grade: %d \n", pSRecord[middle]->FirstNames, pSRecord[middle]->LastNames, pSRecord[middle]->IDNums, pSRecord[middle]->Marks);
            exit(0);

        } else if (strcmp(name, pSRecord[middle]->LastNames) > 0){

            first = middle + 1;

        } else if (strcmp(name, pSRecord[middle]->LastNames) < 0){

            last = middle - 1;

        }
    }

将其放入一个函数中,如果存在则返回其索引,如果不存在则返回 -1,然后就完成了

关于有人可以解释为什么它不会执行我的二分搜索中的最后一个 else if 语句吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46676334/

相关文章:

python - 从二维坐标识别区域的最快方法

c++ - 与迭代相比,为什么我的二进制搜索如此慢?

javascript - 二进制搜索代码

c - fopen中的r和rb有什么区别

C宏扩展成多个函数调用

java - 将用户输入转换为乱七八糟的布偶谈话

Javascript IF ELSE 语句停止

c++ - 为什么我的二进制搜索需要额外的比较? log2(N)+1

c - 检查数组中是否存在数字的程序

c - printf 中的评估顺序和打印