要查询到同一个房间的所有人 printf("要查找的房间\n"); int room; scanf("%d",&room); getchar(); int indexb; indexb=SearchByroom(stu, n, room); if(indexb !=-1) { printf("查询结果:\n%s %s %d\n", stu[indexb].name, stu[indexb].id, stu[indexb].room); } else { printf("没有找到该学生\n"); }break; case 0: b=0; printf("已经退出查询\n"); break; default: printf("输入的类型无效,请重新输入。\n"); break; } }int SearchByroom(struct student stu[],int n,int value) { int left = 0, right = n - 1; while (left <= right) { int mid = (left + right) / 2; if (stu[mid].room == value) { return mid; } else if (stu[mid].room > value) { right = mid-1; } else { left = mid+1; } } return -1; }
时间: 2024-02-14 09:22:32 浏览: 24
这段代码是一个查询同一房间所有人信息的功能,其中SearchByroom函数是用来实现二分查找的,它的返回值是查找到的学生在结构体数组stu中的索引值。
具体实现是:先让用户输入要查找的房间号,然后调用SearchByroom函数查找,如果找到了就输出该学生的姓名、学号和房间号,否则输出“没有找到该学生”。
需要注意的是,该代码中的二分查找前提是学生信息按照房间号从小到大排好序,如果没有排序,需要先对结构体数组stu进行排序操作。
相关问题
printf("要查找的房间\n"); int room; scanf("%d",&room); getchar(); int indexb; indexb=SearchByroom(stu, n, room); if(indexb !=-1) { printf("查询结果:\n"); for(int i=indexb; i<n && stu[i].room==room; i++) { printf("%s %s %d\n", stu[i].name, stu[i].id, stu[i].room); } } else { printf("没有找到该学生\n"); }break;第一个同房间的人没有显示
根据你提供的代码,我看到在查询结果的循环中,for循环的条件是`i<n && stu[i].room==room`,这个条件只会让循环执行到同房间的最后一个人,而不会包括第一个同房间的人。所以第一个同房间的人没有显示出来。
如果想要包括第一个同房间的人,可以将for循环的条件改为`i<n && stu[i].room<=room`,这样就可以将同房间的所有人都显示出来了。
scanf("%d",&a); switch(a) { case 1: printf("要查找的姓名\n"); char name[20]; scanf("%s",name); int index; index=SearchByName(stu, n, name); if(index != -1) { printf("查询结果:\n%s %s %d\n", stu[index].name, stu[index].id, stu[index].room); } else { printf("没有找到该学生\n"); }break; case 2: printf("要查找的学号\n"); char id[15]; scanf("%s",id); int indexa; indexa=SearchByNumber(stu, n, id); if(indexa != -1) { printf("查询结果:\n%s %s %d\n", stu[indexa].name, stu[indexa].id, stu[indexa].room); } else { printf("没有找到该学生\n"); }break; case 3: printf("要查找的房间\n"); int room; scanf("%d",&room); int indexb; indexb=SearchByroom(stu, n, room); if(indexb !=-1) { printf("查询结果:\n%s %s %d\n", stu[indexb].name, stu[indexb].id, stu[indexb].room); } else { printf("没有找到该学生\n"); }break; case 0: b=0; printf("已经退出查询\n"); break; default: printf("输入的类型无效,请重新输入。\n"); break; } } return 0; }查询不了第一个
在这段代码中,无法查询到第一个学生的原因可能是因为在输入要查找的姓名时,输入了多余的空格或回车符。这些字符会被当作字符串的一部分,导致和结构体数组中的字符串不匹配,最终导致查找失败。
解决方法是在读取输入字符串之前先清除输入缓冲区中的多余字符,可以使用 `getchar()` 函数清除缓冲区中的字符。例如:
```
printf("要查找的姓名\n");
char name[20];
scanf("%*[^\n]"); // 清除输入缓冲区中的多余字符
scanf("%*c"); // 将换行符从输入缓冲区中取出
scanf("%s", name);
```
这样就可以避免多余字符对字符串匹配造成的影响,确保可以查询到第一个学生。
阅读全文