C 有人能解释一下为什么在我的二进制搜索中它不会执行最后一个else if语句吗
当我运行此命令并尝试搜索不在结构中的名称时,它不会执行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
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);