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