Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 有人能解释一下为什么在我的二进制搜索中它不会执行最后一个else if语句吗_C_If Statement_Binary Search - Fatal编程技术网

C 有人能解释一下为什么在我的二进制搜索中它不会执行最后一个else if语句吗

C 有人能解释一下为什么在我的二进制搜索中它不会执行最后一个else if语句吗,c,if-statement,binary-search,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

当我运行此命令并尝试搜索不在结构中的名称时,它不会执行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);

    }
if(名字,pSRecord[middle]->LastNames,pSRecord[middle]->IDNums,pSRecord[middle]->Marks);
出口(0);
}else if(strcmp(名称,pSRecord[middle]->LastNames)>0){
第一个=中间+1;
}else if(strcmp(名称,pSRecord[middle]->LastNames)<0){
最后=中间-1;
}
}
}否则如果{
printf(“未找到姓氏为%s的记录。\n”,名称);
出口(0);
}

当这是一个函数时,甚至不应该编译,因为(…}else如果{…)

但是忽略这一点,为什么要使用if(首先是IDNums,pSRecord[middle]->Marks); 出口(0); }else if(strcmp(名称,pSRecord[middle]->LastNames)>0){ 第一个=中间+1; }else if(strcmp(名称,pSRecord[middle]->LastNames)<0){ 最后=中间-1; } }
将它放入一个函数中,如果它存在,则返回它的索引;如果它不存在,则返回-1。除了这个无效的构造,您就完成了

else  if{
外部if语句没有意义,因为变量
first
last
正在while循环中更改

把它拿走

    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;

        }
    }

    printf("No Record Found With The Last Name %s. \n", name);
    exit(0);
while(firstLastNames)==0{
printf(“找到以下记录:\n名称:%s%s\n学生ID:%d\n学生成绩:%d\n”,pSRecord[middle]->名字,pSRecord[middle]->姓氏,pSRecord[middle]->IDNums,pSRecord[middle]->分数);
出口(0);
}else if(strcmp(名称,pSRecord[middle]->LastNames)>0){
第一个=中间+1;
}else if(strcmp(名称,pSRecord[middle]->LastNames)<0){
最后=中间-1;
}
}
printf(“未找到姓氏为%s的记录。\n”,名称);
出口(0);

这甚至不应该编译<代码>…}否则,如果{…是一个语法错误,并且在编译之后,您只需要对
if(first
测试一次,因此它永远不会触发else子句。,:思考:@Kevin为什么?如何?:o@FelixPalmen读取两次。OP有
if(第一次
    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;

        }
    }

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